PDA

Visualizza la versione completa : [C++] stampare lista


Salvatore_91
26-01-2009, 18:22
Ciao raga, ho creato questo piccolo programma che crea una lista a puntatori.
Esso, esegue gli inserimenti in testa.
Però non riesco a fare la stampa, mi potete aiutare???


#include <iostream>
using namespace std;

struct lista
{
int num;
lista *punt;
};

int main()
{
lista *x;
int y;
char ins;

lista *p = new lista;
cout <<"Inserisci il numero = ";
cin >> p->num;
p->punt=NULL;
x=p;
cout <<"Devi inserire ? (s/n) = ";
cin >>ins;

while (ins=='s' || ins=='S')
{
lista *q = new lista;
cout <<"Inserisci il numero = ";
cin >> q->num;
q->punt=x;
x=q;
cout <<"Devi inserire ? (s/n) = ";
cin >>ins;
}

system("PAUSE");
}

Salvatore_91
26-01-2009, 18:47
Quindi poiche' alla fine, q e' la testa, quando cerco di fare un ciclo , mi dice che q non e' dichiarata.

Infernal
26-01-2009, 18:47
Devi iterare tutta la lista con un while, e man mano che avanzi nella lista stampi il valore dell'oggetto corrente....

Infernal
26-01-2009, 18:54
Ovviamente devi ricominciare dall'inizio della lista! Il puntatore al primo elemento è p; quindi devi partire da p, e iterare fino a che non trovi NULL

Salvatore_91
26-01-2009, 19:02
scusa, Infernal, ma non mi trovo. Per me p e' l'ultimo nodo, infatti come detto prima, gli inserimenti (dei nodi), li faccio in testa, per questo collego subito p a NULL.
Cmq non e' che potresti postarmi il codice?
io faccio:


while(q-punt!=NULL) //errore
{
cout<<q->num;
q=q->num;
}


ma mi da errore dicendo che non ho dikiarato q

Infernal
26-01-2009, 19:16
Scusa ho letto male.. allora ok, q punta al primo elemento...

nel while che hai scritto:



while(q->punt!=NULL) // qui ci va un > che tu non avevi messo
{
cout<<q->num;
q=q->punt; /*qui devi modificare, q->num punta al valore dell'elemento corrente, a te serve reindirizzare q sul prossimo elemento, il cui indirizzo è in q->punt*/
}

Salvatore_91
26-01-2009, 19:22
sisi ok ho sostituito con:


while(q->punt!=NULL) //qui errore
{
cout<<q->num;
q=q->punt;
}


ma mi da errore dicendo: `q' undeclared (first use this function)

Infernal
26-01-2009, 19:33
Allora... q l'hai dichiarato dentro il ciclo while d'inserimento.... il che vuol dire che fuori dal while quella variabile non esiste. Se utilizzi x al posto di q(sono uguali), non ti darà questo problema perche x la dichiari fuori dal while.

oregon
26-01-2009, 19:44
lista *pp=x;
while(pp)
{
cout<<pp->num;
pp=pp->punt;
}

Salvatore_91
26-01-2009, 19:48
scusate, ma non ho capito.
dovrei cambiare tutto?.

Loading