Se si hanno quattro nodi definiti come sopra e inizializzati in modo opportuno (...), un esempio di lista può essere questo:codice:typedef struct { int number; // informazione Nodo* next; // puntatore al nodo successivo } Nodo;
A -> B -> C -> D
Dove con la freccia indico che ogni nodo "sa" che nodo si trova davanti ad esso, informazione che si ottiene dal puntatore 'next'. Ecco come può essere creata in breve quella lista:
Il tutto si risolve in:codice:void main() { Nodo A, B, C, D; Nodo* primoElemento = &A; A.number = 1; B.number = 2; C.number = 3; D.number = 4; A.next = &B; // A.next punta a B, A -> B B.next = &C; // B.next punta a C, B -> C C.next = &D; // C.next punta a D, C -> D }
A -> B -> C -> D
Una volta ottenuta questa struttura, la si può facilmente scorrere attraverso i campi 'next'. Se in questo caso volessi il generico 3° elemento della lista:
Ed ecco che con questo breve codice avremo un puntatore 'nodoDaCercare' a 'C'.codice:const unsigned indiceNodo = 3; Nodo* nodoDaCercare = primoElemento; // punta quindi ad 'A' for( unsigned i = 1; i < indiceNodo; i++ ) nodoDaCercare = nodoDaCercare->next;
La flessibilità di una lista sta nel fatto che può essere gestita in modo dinamico (come ha detto dany), senza il problema di riallocare tutti gli elementi. Ad es., se si volesse aggiungere un elemento alla fine:
A -> B -> C -> D -> E
Basterebbe creare un nuovo nodo 'E', scorrere tutta la lista, e far puntare 'D.next' a questo nuovo nodo creato.
N.B.: per far sì che "ci si accorga" di essere arrivati alla fine della lista, per convenzione si imposta il campo 'next' dell'ultimo elemento a NULL (sinonimo di '0', puntatore nullo), altrimenti si rischia un ciclo di scorrimento infinito!
Questo è uno dei più semplici esempi di tipo di dato astratto. Altri possono essere pile (o stack), code, alberi ecc. ecc., usati cmq a seconda delle proprie esigenze.
Spero di essere stato chiaro.
Ciao.
P.S.: non hai specificato il linguaggio nel quale intendevi avere la spiegazione, quindi l'ho scritto con quello a me più congeniale. :adhone: Se hai problemi col C fammi sapere così al limite te lo traduco in un altro linguaggio, se posso.

Rispondi quotando