PDA

View Full Version : [C++] Programma stack


luigi90x
07-05-2011, 11:25
Ho fatto questo programmino che dovrebbe (in teoria) inserire e poi stampare gli elementi di uno stack. Il fatto è che mi dice sempre che lo stack è vuoto come se non inserisse niente. Ho notato che non aggiorna la variabile "testa" nella funzione push. Grazie mille.

#include<iostream>
using namespace std;

typedef struct newnode {
int data; //campo info del nodo
struct newnode *next; //puntatore al nuovo nodo di tipo newnode
};



//prototipi delle funzioni
void push(newnode *testa, int info);
void printstack (newnode *curr);

main()
{
newnode *testa;
int info; //i nuovi nodi eventualmente inseriti dall''utente

testa = NULL;

cout<<"quanti elementi inserisci?"<<endl;
int n;
cin>>n;

int i;
for (i=0;i<n;i++)
{
cout<<"inserisci l'elemento"<<i<<":"<<endl;
cin>>info;

push(testa, info);

}

cout<<endl;

newnode *curr = testa;
printstack(curr);
cin>>i;
}


//funzione push
void push(newnode *testa, int info)
{
newnode *newp; //puntatore al nuovo nodo

newp = new newnode; //allocazione memoria del nuovo nodo

//inserisce il nodo in cima alla lista

newp -> data = info;
newp -> next = testa;
testa = newp;
}

//funzione stampa pila
void printstack (newnode *curr)
{

if (curr==NULL)
cout<<"Lo stack è vuoto"<<endl;
else
{
cout<<"lo stack è:"<<endl;

while (curr!=NULL)
{
cout<<curr->data<<endl;
curr = curr->next;
}
}
}

tuccio`
07-05-2011, 11:52
la stampa come fosse vuota perché lo è


//funzione push
void push(newnode *testa, int info)
{
newnode *newp; //puntatore al nuovo nodo

newp = new newnode; //allocazione memoria del nuovo nodo

//inserisce il nodo in cima alla lista

newp -> data = info;
newp -> next = testa;
testa = newp;
}


facendo testa = newp non modifichi la variabile testa che hai nel main, ma modifichi la variabile testa della funzione push che non è visibile appena termina la funzione stessa

per farlo in modo corretto puoi o ritornare un puntatore a newnode (ritorni la nuova testa, e chiami scrivendo testa = push(testa, info))

oppure usare passare il puntatore alla testa per riferimento

luigi90x
09-05-2011, 13:30
grazie mille ora provo e vedo se va. ;)