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!
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!