Come creare una lista collegata in C

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.

istruzione

Creare la struttura dei dati

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;

Aggiungere alla lista

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;

Accedere alla lista

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;

Pulire il vostro lavoro

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;
}

Consigli e avvertenze

  • E 'una buona idea per creare una funzione C da aggiungere alla lista collegata, quindi sempre usare al posto di fare questo direttamente.
  • "liste doppiamente collegate" fare eliminazioni e alcune ricerche più efficiente utilizzando un "precedente" puntatore lungo con il puntatore "next", ma fanno aggiunge meno efficiente.
  • L'eliminazione dalla lista è simile ad aggiungere ad esso, ma avrete bisogno di trovare il suo predecessore e cambiare la sua prossima puntatore al prossimo puntatore dell'elemento eliminato, scavalcando, prima deallocando esso. L'eliminazione dei primi o ultimi elementi richiederà l'aggiornamento delle variabili capo né coda, invece.
  • E 'possibile ordinare una lista concatenata C, e può essere molto efficace per farlo, dal momento che è solo i puntatori, non i dati effettivi, che si deve spostare e copiare. Tuttavia, è un algoritmo complicato.