August 8
In C, una lista collegata permette di creare una lista senza decidere prima del tempo quanto tempo potrebbe essere, e senza sprecare memoria elementi che non abbiamo ancora allocazione. Lo svantaggio è che si deve fare tutto il lavoro di organizzare e gestire l'elenco in memoria.
1 Scegliere un nome, quindi utilizzare typedef per definirlo. Ogni lista collegata avrà bisogno di una struttura, anche se ha una sola variabile:
typedef struct product_data PRODUCT_DATA;
2 Definire la struttura. L'ultimo elemento deve essere un puntatore al tipo appena definito, e il nome di "prossimo":
struct product_data {
int codice_prodotto;
int product_size;
PRODUCT_DATA * prossimo;
};
3 Allocare due puntatori a questa struttura di dati, li inizializzazione a NULL, per essere nella lista "testa" e "coda":
PRODUCT_DATA
products_head = NULL;
PRODUCT_DATA products_tail = NULL;
4 Assegnare una variabile temporanea che è un puntatore alla struttura dati:
PRODUCT_DATA * newproduct;
5 Utilizzare malloc () per creare un nuovo elemento, sempre controllando un errore:
if ((newproduct = malloc (sizeof (PRODUCT_DATA))) == null) {abort (); }
6 Compilare i campi del nuovo elemento. Impostare il suo campo "accanto" a NULL:
newproduct-> codice_prodotto = Nuovo codice;
newproduct-> product_size = newSize;
newproduct-> next = NULL;
7 Impostare la variabile testa. Se la variabile testa è NULL, questo è il primo elemento aggiunto all'elenco, in modo da impostare la variabile testa per puntare ad esso:
se products_head = newproduct (products_head!);
8 Preparati per una variabile diversa. In altri casi, la coda punti variabile per l'ultimo elemento della lista, in modo da impostare il suo valore successivo per puntare al nuovo elemento:
altro products_tail-> next = newproduct;
9 Aggiornare la coda per puntare al nuovo ultimo elemento, in entrambi i casi:
products_tail = newproduct;
10 Creare un'altra punta variabile temporanea per la struttura dei dati:
PRODUCT_DATA * prodotto;
11 Impostare la variabile temporanea alla variabile testa:
prodotto = products_head;
12 Loop attraverso gli elementi, controllando ciascuno e quindi impostando la variabile temporanea al puntatore prossimo muovere nel prossimo:
mentre (prodotto) {if (prodotto-> codice_prodotto = 15!) {prodotto = prodotto-> prossimo; }}
13 Controllare se la variabile è NULL. Se è così, non avete mai trovato l'articolo:
se ritorno 0 (prodotto!); . In caso contrario, indica la voce che stavate cercando:
tornare prodotto-> product_size;
14 DEALLOCATE la lista quando il programma termina, in quanto non tutti i sistemi operativi gestirà automaticamente.
15 Loop finché la variabile di testa non è NULL:
while (products_head) {
16 Conservare la sua prossima puntatore nella variabile coda temporanea:
products_tail = products_head-> prossimo;
17 DEALLOCATE l'elemento:
gratuito (products_head);
18 Impostare il puntatore di testa al puntatore salvato nel passaggio 4:
products_head = products_tail;
}