|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jan 2005
Messaggi: 2
|
[C++] liste a nodi concatenati
Ciao a tutti!
Ho iniziato da poco a studiare il C++ e sto cercando di capire come funzionano alcuni programmi per entrare un po' nell'ottica del linguaggio. Vorrei chiedervi se potete aiutarmi a chiarire un dubbio su questo programma che effettua l'inserimento di un nodo in una lista ordinata (lista a nodi concatenati): {void ins_ord(node *&p0, int v) { node *p = 0; node *q; node *r; for (r = p0; r!=0 && r->item < v; r = r->next) p = r; q = new node; q->item = v; q->next = r; if (p==0) p0 = q; else p->next = q; }; Io lo interpreto così:una volta che ho il nodo che precede v eseguo l'ultimo for, aggiorno r che punterà al nodo con valore > o =v e assegno l'indirizzo di tale nodo a p. A questo punto creo un nodo con valore v e poi ( sempre che p non sia uguale a 0 ) lo inserisco dopo il nodo puntato da p ( e quindi con valore v). Il mio dubbio è: se p e r puntano allo stesso nodo ( che contiene il un valore maggiore o uguale a v) non è contraddittorio scrivere q->next = r; ( che prevede di inserire q prima di p ) e poi dopo p->next = q; ( che prevede di inserire p prima di q) ...non andrebbe bene se si eliminasse quest'ultima? Probabilmente interpreto male il programma... potete aiutarmi a capirlo? Grazie! |
|
|
|
|
|
#2 |
|
Junior Member
Iscritto dal: Jan 2005
Messaggi: 2
|
Ho capito di aver omesso un'informazione utile per la comprensione del programma cioè che p0 è il puntatore al primo nodo della lista.
Intanto ho provato a modificare il programma e ora mi sembra che potrebbe funzionare. Ve la scrivo qui di seguito: {void ins_ord(node *&p0, int v) { node *p = 0; node *q; node *r; for (r = p0;r->next !=0 && r->next->item < v; r = r->next) p = r; r = r->next q = new node; q->item = v; if (p0->item<v) q->next = r; else {q->next = p; p0=q;} if (p==0) p0 = q; else p->next = q; }; Vi sembra che funzioni oppure è corretta la versione precedente? Grazie! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:18.



















