Ciao a tutti, avrei un po di difficoltà nella comprensione delle
liste. Posto qui un pezzo di programma, affinchè qualcuno mi possa
gentilmente commentare riga per riga le due funzioni list_add e
list_remove sperando cosi di capirci qualcosa di più...Vi ringrazio
fin da adesso...
/* STRUTTURA GLOBALE */
typedef struct ns {
int data;
struct ns *next;
} node;
.........
/* FRAMMENTO DI FUNZIONE MAIN */
int main(void) {
node *n = NULL;
list_add(&n, 0); /* lista: 0 */
list_add(&n, 1); /* lista: 1 0 */
list_add(&n, 2); /* lista: 2 1 0 */
list_add(&n, 3); /* lista: 3 2 1 0 */
list_add(&n, 4); /* lista: 4 3 2 1 0 */
list_print(n);
list_remove(&n); /* rimuove il primo elemento (4) */
list_remove(&n->next); /* rimuove il nuovo secondo (2) */
list_remove(list_search(&n, 1)); /* rimuove la cella che contiene
1 (primo) */
list_remove(&n->next); /* rimuove il successivo (0) */
list_remove(&n); /* rimuove l'ultimo (3) */
.......
/* AGGIUNGO UN ELEMENTO ALLA LISTA */
node *list_add(node **p, int i) {
node *n = malloc(sizeof(node)); /* alloco memoria */
n->next = *p;
*p = n;
n->data = i;
return n;
}
/* RIMUOVO ELEMENTO */
void list_remove(node **p) { /* rimuove head */
if (*p != NULL) {
node *n = *p;
*p = (*p)->next;
free(n);
}

Rispondi quotando
(e' anche l'una meno un quazzo)

