PDA

View Full Version : [C++] liste a nodi concatenati


jennix
24-01-2005, 21:54
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!

jennix
26-01-2005, 17:54
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!