Nwlapcug.com


Come creare una lista concatenata in C

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.