struct el
{ int inf;
el *pun;
};

Ti ha definito un tipo di dato record, al cui interno vi sono 2 campi, uno atto a contenere un intero e l'altro un puntatore..
Non so se hai ben capito cosa sia la lista..bhè, ogni suo elemento è un record(almeno nel tuo caso), e tu puoi accedere ai record tramite dei puntatori (magari allocati anche dinamicamente)..Anzichè conservarti tutti i puntatori a tutti i record ,ti vai a creare una lista.. Puoi accedere a tutti i suoi elementi attraverso un solo puntatore: in questo puntatore ci sarà l'indirizzo di un solo record, ma nel record troverai l'indirizzo dell'elemento (record) successivo (ecco a cosa serve el* pun), e così via...


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

Questa fuzione crea una lista.Gli passi il numero di elementi che deve contenere e ti restituisce il puntatore alla lista (el *)..
Il ciclo è infatti ripetuto in base al numero che hai inserito nel main, ad ogni passo
1) ti alloca dinamicamente una struct el (p=new el),
2) ti chiede di inserire un intero (cin>>p->inf),
3) ti inizializza il campo puntatore a null,
4) in p0 ti passa il puntatore all'ultima struct inserita,
che è poi ciò che la funzione ti restituisce.
Alla fine, la prima struct inserita è l'ultima cui puoi accedere, e il suo campo puntatore è inizializzato a null.


el *estrai(el *&p)
{
el *pp;
pp= p->pun;
delete p;
return pp;
};

Sarebbe stato + giusto chiamarla elimina: infatti con questa funzione elimini un elemento della lista (delete p), stando però attento a salvare il puntatore contenuto nella struct da eliminare (pp=p->num), altrimenti perdi tutto il resto della lista!!La fuzione ti restituisce proprio quel puntatore: dovrà poi essere inserito nel primo elemento della lista che precedeva quello che hai eliminato...

Prova ora a capire cosa può fare accoda!!!

Sperando ovviamente di essere stato abbastanza chiaro!!!



:quipy: