| Autore |
Discussione  |
|
|
GIMLI_AT_WAR
Nuovo Utente
|
Inserito il - 24/05/2004 : 12:32:01
|
ciao ragazzi chi mi aiuta a capire questo listato,magari commentandomi i passaggi poco chiari si tratta di una lista in c.
#varie inclusioni
struct el_lista { int dato; struct el_lista *el_succ; }; typedef struct el_lista *Elem; //ok un nuovo tipo di puntatore // a struttura
int stampa_lista(Elem); Elem add_el(void);
main() { Elem lista = NULL, new_el, last_el; // COSA DIO STA FACENDO QUI??? // dichiara una istanza del // tipo ELEM di nome LISTA e la // assegna a tre variabili??HELP! do { if ((new_el = add_el()) != NULL) { if (lista == NULL) lista = new_el; else (*last_el).el_succ = new_el; last_el = new_el; } } while (new_el != NULL); stampa_lista(lista); system("PAUSE"); return 0; }
Elem add_el(void) { int i=0; Elem new_el; printf("Inserisci un intero positivo: "); scanf("%d",&i); printf("\n"); if (i > 0) { new_el = (Elem)malloc(sizeof(struct el_lista)); (*new_el).dato = i; (*new_el).el_succ = NULL; return new_el;} else return NULL;}
int stampa_lista(Elem last_el) { printf("\nLa lista inserita è:\n"); while(last_el != NULL) { printf("%i\n",(*last_el).dato); last_el = (*last_el).el_succ; } }
|
|
|
Iddqd
Arbiter Musicae
 

Regione: Puglia
Prov.: Foggia
|
Inserito il - 24/05/2004 : 13:59:02
|
Citazione: Messaggio inserito da GIMLI_AT_WAR
ciao ragazzi chi mi aiuta a capire questo listato,magari commentandomi i passaggi poco chiari si tratta di una lista in c.
//Vediamo un po':
struct el_lista { int dato; struct el_lista *el_succ; };
typedef struct el_lista *Elem; //ok un nuovo tipo di puntatore a struttura
int stampa_lista(Elem); Elem add_el(void);
main() { Elem lista = NULL, new_el, last_el;
// COSA DIO STA FACENDO QUI??? // dichiara una istanza del // tipo ELEM di nome LISTA e la // assegna a tre variabili??HELP!
/* No, dichiara tre variabili di tipo "Elem" e ne inizializza una a NULL. In breve quella scrittura è equivalente a: struct el_lista *lista = NULL; struct el_lista *new_el; struct el_lista *last_el; */
do { if ((new_el = add_el()) != NULL) { if (lista == NULL) lista = new_el; else (*last_el).el_succ = new_el;
/* Qui per comodità si può usare la forma: nome_punt_strutt->elemento; Che è equivalente a (*nome_punt_strutt).elemento; */
last_el = new_el; } } while (new_el != NULL); stampa_lista(lista); return 0; }
Elem add_el(void) { int i=0; // Credo che questa inizializzazione a 0 sia superflua. Elem new_el;
printf("Inserisci un intero positivo: "); scanf("%d",&i); printf("\n"); if (i > 0) { new_el = (Elem)malloc(sizeof(struct el_lista)); (*new_el).dato = i; (*new_el).el_succ = NULL;
return new_el; } else return NULL; }
int stampa_lista(Elem last_el) { printf("\nLa lista inserita è:\n"); while(last_el != NULL) { printf("%i\n",(*last_el).dato); last_el = (*last_el).el_succ; } }
/* Questa magica funzione non restituisce alcun valore... E in effetti non si spiega come mai è dichiarata come int e non void.*/
Comunque si tratta di un programmino che legge degli interi, li memorizza in una struttura concatenata e, quando viene inserito un qualche oscuro valore minore o uguale a 0, esce dopo aver stampato tutti i valori inseriti. La cosa che lascia perplessi è che non disalloca la memoria occupata. Comunque in ogni caso ti consiglio:
while(!sonochiari(alcuni_punti, GIMLI_AT_WAR)) { nonesitare(); post_forum(alcuni_punti);
while(!qualcuno_risponde_sul_forum) DoNothing();
Leggi_risposta(); }
E speriamo che sonochiari(alcuni_punti, iddqd).
|
2.0211 If the world had no substance, then whether a proposition had sense would depend on whether another proposition was true. |
 |
|
| |
Discussione  |
|
|
|