In C, un elenco collegato consente di creare un elenco senza decidere in anticipo quanto tempo potrebbe essere, e senza sprecare memoria allocando gli elementi non avete ancora. L'unico inconveniente è che si deve fare tutto il lavoro di organizzare e gestire l'elenco in memoria.
Istruzioni
Creare la struttura di dati
1
Scegliere un nome, quindi utilizzare typedef per definirlo. Ogni elenco collegato avrà bisogno una struttura, anche se ha solo una variabile:
typedef struct product_data PRODUCT_DATA;
2
Definire la struttura. L'ultimo elemento deve essere un puntatore al tipo appena definita e chiamata "next":
struct product_data {
codice_prodotto int;
int product_size;
PRODUCT_DATA * successivo;
};
3
Allocare i due puntatori a questa struttura di dati, loro inizializzazione su NULL, per essere la lista "testa" e la "coda":
PRODUCT_DATA products_head = NULL;
PRODUCT_DATA products_tail = NULL;
Aggiungere all'elenco
4
Allocare una variabile temporanea che è un puntatore alla struttura dei dati:
PRODUCT_DATA * newproduct;
5
Utilizzare malloc () per creare un nuovo elemento, sempre controllando un errore:
Se ((newproduct = malloc(sizeof(PRODUCT_DATA))) = = NULL) {Abort ();}
6
Popolare i campi dell'elemento nuovo. Impostare il campo "successivo" NULL:
newProduct -> product_code = newcode;
newProduct -> product_size = newsize;
newProduct -> next = NULL;
7
Impostare la variabile di testa. Se la variabile testa è NULL, questo è il primo elemento aggiunto all'elenco, quindi impostare la variabile testa per puntare ad esso:
Se (! products_head) products_head = newproduct;
8
Prepararsi per una variabile diversa. In altri casi, la variabile coda punta all'ultimo elemento nell'elenco, quindi impostare il valore successivo per puntare al nuovo elemento:
altro products_tail -> next = newproduct;
9
Aggiornare la coda per puntare al nuovo elemento ultimo, in entrambi i casi:
products_tail = newproduct;
Accedere all'elenco
10
Creare un'altra variabile temporanea che punta alla struttura dei dati:
PRODUCT_DATA * prodotto;
11
Impostare la variabile temporanea alla testa variabile:
prodotto = products_head;
12
Scorrere gli elementi, controllando ogni uno e quindi impostando la variabile temporanea il puntatore successivo per attraversare quello successivo:
mentre (prodotto) {se (prodotto -> codice_prodotto! = 15) {prodotto = prodotto -> next;}}
13
Verifica se la variabile è NULL. Se è così, hai mai trovato l'elemento:
Se (! prodotto) return 0;. In caso contrario, punta all'elemento che stavi cercando:
prodotto restituito -> product_size;
Ripulire il vostro lavoro
14
Deallocare la lista quando il programma termina, come non tutti i sistemi operativi gestirà automaticamente.
15
Loop, purché la variabile testa non è NULL:
mentre (products_head) {
16
Memorizzare il puntatore successivo nella variabile coda temporaneamente:
products_tail = products_head -> next;
17
Rilasciare l'elemento:
Free(products_head);
18
Impostare il puntatore di testa il puntatore che è stato salvato nel passaggio 4:
products_head = products_tail;
}
Consigli & Avvertenze
- È una buona idea creare una funzione di C per aggiungere alla lista collegata, quindi sempre usarlo invece di fare questo direttamente.
- "Liste doppiamente concatenate" rendono eliminazioni e alcune ricerche più efficiente utilizzando un puntatore "precedente" insieme con il puntatore "successivo", ma fanno aggiunge meno efficiente.
- Eliminazione dall'elenco è simile all'aggiunta ad esso, ma avrai bisogno trovare il suo predecessore e modificare il puntatore del mouse puntatore successivo dell'elemento eliminato, ignorando che, prima di deallocazione. Eliminare gli elementi di primi o l'ultimi verrà richiedono l'aggiornamento la testa o coda variabili invece.
- È possibile ordinare un elenco collegato di C, e può essere molto efficiente per farlo, dal momento che è solo i puntatori, dati non reali, che si devono spostare e copiare. Tuttavia, è un algoritmo complesso.