PDA

Visualizza la versione completa : [C++] Funzione che crea una lista


Pacio88
18-10-2008, 13:07
Questa funzione dovrebbe creare una lista:


//...
struct elem
{
int inf;
elem* pun;
}

typedef elem* lista;

lista crealista(int n)
{
lista p0=0:
elem* p;
for (int i+1; i<=n, i++)
{
p=new elem;
cin >> p->inf;
p-> pun=p0;
p0=p;
}
return p0;
}

Su questo codice avrei due domande:

1. Il comando typedef si riferisce allo struct elem o al suo membro elem* pun?(Io penso alla struttura)

2. Seguendo l'esecuzione del programma non capisco come ogni volta il ciclo for crei una nuova struttura al quale si fa riferimento con il puntatore della struttura precedente. A mio avviso ogni volta che si chiama l`istruzione p0=p si cancella il vecchio contenuto di p0 e si salva la nuova struttura.

Secondo il mio ragionamente succederebbe questo(con n=2):

n=1
p0=0
p=elem{inf=? e pun=p0}
p0=p quindi p0=elem

n=2
p0=elem
p=elem2{inf=? e pun=p0}
p0=elem2

Quindi la struttura elem(la prima) andrebbe persa...

mondobimbi
18-10-2008, 15:46
typedef elem* lista;

definisce un alias per un puntatore a elem, quindi tutte le volte che vedi scritto lista e come se scrivessi elem*.

nella funzione crealista la riga
for (int i+1; i<=n, i++)

i Ŕ indefinito e quindi comporta risultati inaspettati. Inoltre non Ŕ definito p->inf. La funzione appare purtroppo non molto chiara nelle finalitÓ e con errori e non Ŕ possibile dirti quindi come sistemarla.

Tieni infene presente che nella std library esiste un tipo list giÓ pronto all'uso.
ciao
sergio

Pacio88
18-10-2008, 21:02
La funzione non l'ho scritta io, ma l'ho presa da un libro universitario del corso di programmazione. Sfogliandolo ho trovato questo esempio e non capendone a pieno il significato cercavo una spiegazione.

Per quanto riguarda l'alias creato con typedef non ho ancora ben capito a quale elem si riferisce, se quello interno alla struttura o alla struttura stessa.

Samuele_70
18-10-2008, 22:09
Certo lista si riferisce alla struttura stessa,
precisamente Ŕ un puntatore ad una variabile di tipo elem.

mondobimbi
19-10-2008, 13:19
scrivere

lista p0 = NULL;
oppure
elem* lista p0 = NULL;

Ŕ equivalente.

Per quanto riguarda l'esempio del testo universitario dovresti postare tutto il codice, se ti Ŕ possibile, con il main.
Come ti dicevo l'istruzione

for (int i+1; i<=n, i++)
non inizializza la variabile i. A meno che fosse scritto
for (int i =1; i<=n, i++) e tu hai trascritto erroneamente i+1
ciao
sergio

Loading