PDA

Visualizza la versione completa : [C++] Stampa di una lista restituisce valore errato


AngeloV
05-02-2011, 13:14
Quando cerco di stampare a video gli elementi della mia testa, mi accorgo che esce sempre 0 e non riesco a capire il motivo.


main.cpp



#include <cstdlib>
#include <iostream>
#include "prova.h"

using namespace std;

int main(int argc, char *argv[])
{
//VARIABILI
Pnodo testa;//creo la testa (puntatore record)
testa=0;//inizializzi la testa a 0
int n;//numero massimo di valore da inserire nella lista
int x;//valore che si inserirà nel for

cout<<"Quanti valori vuoi inserire nella lista? Inserisci: ";
cin>>n;

for (int i=0; i<n; i++)
{
cout<<"Inserisci il " <<i <<"^ valore: ";
cin>>x;
push(testa,x);//inserimento in testa alla lista;
}


cout<<"La lista inserita e':\n";
for (int i=0; i<n; i++)
{
cout<<"Il " <<i <<"^ valore e': " <<endl;
stampa(testa,x);//stampa dalla testa
}

system("PAUSE");
return EXIT_SUCCESS;
}


prova.h



#ifndef prova_h
#define prova_h
typedef struct nodo *Pnodo;
typedef struct nodo{
int elemento;
Pnodo successivo;
};

void push(Pnodo &,int &);//inserimento in testa alla lista;
void stampa(Pnodo &,int &);//stampa dalla testa

#endif



prova.cpp


#include <cstdlib>
#include <iostream>
#include "prova.h"

using namespace std;

void push(Pnodo &nuovaTesta,int &x)//inserimento in testa alla lista;
{
Pnodo nuovo = new nodo; //alloco spazio in memorie heap
nuovo->elemento = x; //associo il valore x;
nuovo->successivo = nuovaTesta; //lo lego alla lista
nuovo = nuovaTesta; //diventa la nuova testa
cout<<nuovaTesta;
}

void stampa(Pnodo &nuovaTesta,int &x)//stampa dalla testa
{
Pnodo temp;
temp = nuovaTesta;
while(temp!=0)
{
cout << temp->elemento;
temp = temp->successivo;
}
}

lolide
05-02-2011, 13:53
Beh controlla quel push ... non ti sembra che inserisca sempre nello stesso nodo ?
il cambio tra nuova testa e successivo lo devi fare nel for d'inserimento, non nel push.

metti nuovaTesta in successivo però quando il for fa un altro step, devi cambiare testa con successivo, sennò inserisce sempre al successivo del primo nodo :)

AngeloV
06-02-2011, 21:04
grazie tante!!

Loading