Quote:
Originariamente inviato da -Yara-
Salve a tutti ragazzi...
Come faccio a fare un inserimento in testa ed in coda?
Non ho capito proprio nulla  , grazie a chi mi aiuta
|
L'idea e' di avere una struttura contenente un campo con "l'elemento corrente" (la testa della lista) e uno che punto "al resto della lista" (la coda della lista).
Ad esempio, se vuoi una lista con i tre elementi 24, 7, 2, sara' rappresentata piu' o meno nel seguente modo:
Codice:
+---+ +---+ +---+
|24 | | 7 | | 2 |
+---+ /->+---+ /->+---+
| ----/ | ----/ | ------>(NULL)
+---+ +---+ +---+
Come si fa ad inserire elementi ?
Con l'inserimento in testa e' facile: crei una nuova instanza della struttura, metti nel campo 'dato' il nuovo valore e nel campo 'next' il puntatore alla lista che hai. Nell'esempio sopra, siamo partiti dalla lista vuota (il puntatore a null), abbiamo creato una nuova istanza, abbiamo messo 2 su dato e NULL su next. Per aggiungere 7 abbiamo creato un'altra istanza, scritto 7 su 'dato' e su 'next' il puntatore alla lista di un elemento che avevamo appena creato, ovvero alla struttura contenente il 2, e cosi' via.
Lo puoi scrivere ed usare nel seguente modo (modulo errori

)
Codice:
nodo *lista_vuota = 0;
nodo* inserisci_in_testa( nodo* testa, dato )
{
nuova_testa = new nodo();
nuova_testa->dato = dato;
nuova_testa->next = testa;
return nuova_testa;
}
nodo* tmp = lista_vuota;
tmp = inserisci_in_testa( tmp , 2 )
tmp = inserisci_in_testa( tmp , 7 )
tmp = inserisci_in_testa( tmp , 24 )
L'inserimento in coda e' solo un po' piu' complicato visto che il caso lista vuota va trattato con un attimo di cautela.
Devi creare una nuova istanza di nodo, imposti 'dato' col valore che ti interessa e next su NULL (perche' diventera' l'ultimo elemento). Dopo di che' scorri la tua lista fino all'ultimo elemento, e su di questo imposti il campo next sull'istanza di nodo che avevi creato prima. Ovviamente se la lista e' vuota, non scorri proprio niente e l'elemento appena creato diventa la nuova testa della lista:
Codice:
nodo *lista_vuota = 0;
nodo* inserisci_in_coda( nodo* testa, dato )
{
nodo* ultimo = new nodo();
ultimo->next = 0;
ultimo->dato = dato;
if (testa == 0 )
return ultimo;
nodo* cur = testa;
while( cur->next != 0 )
cur = cur->next;
cur->next = ultimo;
return testa;
}
...
Spero di essere stato chiaro, anche se forse mi son dilungato fin troppo :P