Ultima modifica:
sto da poco studiando le strutture lifo in c++, ed ho trovato un problema di natura logica mia personale che non mi da pace:
questa funzione serve per aggiungere nodi alla coda, delineando prima il nodo inizio con
dopo con else aggiungo il resto di nodi e faccio equivalere la fine a nuovo_ nodo,
la mia domanda è: se facciamo
vi lascio qui la funzione per intero:
e qui l'algoritmo completo:
questa funzione serve per aggiungere nodi alla coda, delineando prima il nodo inizio con
Codice:
if(coda_vuota(frente)){
inizio = nuovo_nodo;
}
dopo con else aggiungo il resto di nodi e faccio equivalere la fine a nuovo_ nodo,
Codice:
else{
fine->prossimo = nuovo_nodo;
}
fine = nuovo_nodo;
la mia domanda è: se facciamo
fine->prossimo = nuovo_nodo
, e poi fuori da else fine = nuovo_nodo
; Non perderemmo ciò che abbiamo inserito in precedenza con fine-> prossimo = nuovo_nodo , poiché il nuovo valore di fine è nuovo_nodo e nuovo_nodo->prossimo è uguale a NULL?vi lascio qui la funzione per intero:
Codice:
void insertCoda(Nodo *&inizio,Nodo *&fine,int n){
Nodo *nuovo_nodo = new Nodo();
nuovo_nodo->dato = n;
nuovo_nodo->prossimo = NULL;
if(coda_vuota(inizio)){
inizio = nuovo_nodo;
}
else{
fine->prossimo = nuovo_nodo;
}
fine = nuovo_nodo;
}
e qui l'algoritmo completo:
C++:
#include<iostream>
#include<conio.h>
#include<stdlib.h>
using namespace std;
struct Nodo{
int dato;
Nodo *prossimo;
};
void insertCoda(Nodo *&,Nodo *&,int);
bool coda_vuota(Nodo *);
int main(){
Nodo *inizio = NULL;
Nodo *fine = NULL;
int dato;
cout<<"digita un numero: ";
cin>>dato;
insertCoda(inizio,fine,dato);
cout<<"digita un numero: ";
cin>>dato;
insertCoda(inizio,fine,dato);
cout<<"digita un numero: ";
cin>>dato;
insertCoda(inizio,fine,dato);
getch();
return 0;
}
void insertCoda(Nodo *&inizio,Nodo *&fine,int n){
Nodo *nuovo_nodo = new Nodo();
nuovo_nodo->dato = n;
nuovo_nodo->prossimo = NULL;
if(coda_vuota(inizio)){
inizio = nuovo_nodo;
}
else{
fine->prossimo = nuovo_nodo;
}
fine = nuovo_nodo;
}
bool coda_vuota(Nodo *inizio){
return (inizio==NULL)? true : false;
}