PDA

Visualizza la versione completa : [C++] Caricamento di una lista


Iena87
21-03-2005, 18:18
Qual l'algoritmo che permette il caricamento di una lista unidirezionale, cio costituita da nodi aventi un elemento e un solo puntatore?

Io so questo algoritmo ma errata la chiamata alla procedura che ne permette il caricamento.

Innanzitutto nella dichiarazione ho:


struct lista{
int n;
lista* pt;
};

lista* first=NULL;

int x;
char risposta;

void inserisci_in_lista(lista*,int);


Poi ho:


int main()
{
do{
cout<<"Inserisci un valore da inserire nella lista : ";
cin>>x;
inserisci_in_lista(first,x);
cout<<"\nVuoi continuare l'inserimento di valori nella lista? (s/n) : ";
cin>>risposta;
}while(risposta=='s');

getch();
return 0;
}

void inserisci_in_lista(lista* lx, int val){
if(lx==NULL){
lx=new(lista);
lx->n=val;
lx->pt=NULL;
}
else
inserisci_in_lista(lx->pt,val);
}


Il problema la chiamata: se faccio il passaggio per valore poi non mi modifico first, se faccio il passaggio per referenza di first da errore....come si fa?

anx721
21-03-2005, 22:52
Un modo che puoi seguire non passare la lista se questa e una variabile globale. Oppure fa in modo che la funzioen di inserimento ritorni la lista come risultato.

kruskaiev
22-03-2005, 01:51
A me cosi' funziona benissimo:


struct lista{
int n;
lista* pt;
lista(int a, lista *b)
{ n=a; pt=b; } //Costruttori
lista() {} };

void inserisci_in_lista(lista*&,int);
void stampa(lista *);

main()
{
lista* first=0;
int x;
char risposta;
do{
cout<<"Inserisci un valore da inserire nella lista : ";
cin>>x;
inserisci_in_lista(first,x);
cout<<"\nVuoi continuare l'inserimento di valori nella lista? (s/n) : ";
cin>>risposta;
}while(risposta=='s');
stampa(first);
}

void inserisci_in_lista(lista*& lx, int val)
{
if(!lx)
lx=new lista(val,0);
else
inserisci_in_lista(lx->pt,val);
}

void stampa(lista *lx)
{
if(lx)
{
cout<<lx->n<<' ';
stampa(lx->pt);
}
}

Questo pezzo:


struct lista{
int n;
lista* pt;
lista(int a, lista *b)
{ n=a; pt=b; }
lista() {} };

Puoi pure scriverlo:


struct lista{ int n; lista* pt; };

Ma allora devi modificare la funzione "inserisci_in_lista" e scriverla:


void inserisci_in_lista(lista*& lx, int val)
{
if(!lx)
{
lx=new lista;
lx->n=val;
lx->pt=0;
}
else
inserisci_in_lista(lx->pt,val);
}

Va bene?
Dimmi di si ti prego.. :unz:

Loading