PDA

Visualizza la versione completa : [C] Esercizio su liste


MrX87
17-06-2008, 17:30
Ciao a tutti, stavo provando a svolgere questo esercizio di programmazione C, ancora non ho scritto tutto il codice, e prima di finire volevo sapere se era corretto risolvere l'esercizio con una lista di liste, ovvero, usando 2 strutture allocate dinamicamente tipo:

link (http://www.mediafire.com/imageview.php?quickkey=xm921yzd2gh&thumb=6)
esercizio



struct pilota {
char pilota[20];
char scuderia[20];
int numero;
struct pilota *next;
struct tempo *top_tempi;
}

struct tempo {
int tempo;
int giro;
struct tempo *next;
}


dove nella prima memorizzo numero pilota, il nome del pilota, la scuderia del pilota, mentre nella seconda struttura memorizzo il tempo relativo a ciuscun giro.
spero di essermi spiegato bene...
se ci sono incomprensioni...fatemelo sapere...darò altre spiegazioni
grazie in anticipo
MrX

MrX87
19-06-2008, 16:47
inoltre volevo sapere un altra cosa...ovvero la cancellazione fisica di una lista di liste...

avendo le 2 liste descritte in precedenza..(o anche altre) si ha:



p = head;
while ( p != NULL ) {
p2 = p->topt;
while ( p2 != NULL ) {
pOldT = p2;
p2 = p2->next;
free ( pOldT );
}
pOldP = p;
p = p->next;
free ( pOldP );
}


potete dirmi se è corretto...perchè ho provato ad implementarlo ma non libera la memoria...ho provato ad aprire il task manager...vedo la memoria allocata...all'avvio del programma la memoria aumenta(nel mio caso di 2mb) ma quando poi faccio eseguire il pezzo di codice postato su...dovrebbe pian piano diminuire...invece termina tutto e nn cambia niente...e solo alla chiusura del programma la memoria si ritorna cm prima...
grazie
Mrx

mondobimbi
19-06-2008, 18:58
ti conviene fare una funzione specifica per liberare la memoria di tempo

questa è ricorsiva




void freeTempo (struct tempo * node) {

if ( node ) {
freeTempo ( node->next ) ;
free ( node ) ;
}

}



adesso continua tu
ciao
sergio

MrX87
20-06-2008, 16:06
thanks per la soluzione..provo ad implementarla per la lista di liste...perchè mi pare di capire che in quel modo si effettua solo una cancellazione di una lista semplice....
grazie ancora...

Loading