13/09/11 15:39
flavio89
Ragazzi ho un problema con le liste generiche.
Premetto che il codice mi è stato dato dal mio docente di programmazione e che non ho scritto io il programma; proprio per questo non riesco a comprendere alcuni punti.
Per completezza ecco il codice, la traccia e la slide dalla quale ho copiato il sorgente.
sorgente dl.dropbox.com/u/25493505/…
traccia dl.dropbox.com/u/25493505/…
Innanzitutto non capisco quale tipo deve assumere la variabile *p_nuovodato che sarebbe il dato da inserire nella lista.
Poi non capisco alcuni parametri passati alle funzioni.
Il paramentro &punt passato ad ins_nodo;
il parametro &prec passato a eli_nodo;
Spero possiate aiutarmi o almeno darmi una dritta.
Grazie anticipatamente
Premetto che il codice mi è stato dato dal mio docente di programmazione e che non ho scritto io il programma; proprio per questo non riesco a comprendere alcuni punti.
Per completezza ecco il codice, la traccia e la slide dalla quale ho copiato il sorgente.
sorgente dl.dropbox.com/u/25493505/…
traccia dl.dropbox.com/u/25493505/…
#include <stdio.h> #include <stdlib.h> typedef struct{ char nome [20]; short eta; }INFO_FIELD; void *creaLista(); void insL_testa (short,INFO_FIELD *,void **); void insL_nodo (short,INFO_FIELD *,void **); void print (struct PERSONA*); void main () { struct PERSONA { INFO_FIELD info; struct PERSONA *p_next; }; struct PERSONA* head; //+p_next; int len_info = sizeof(INFO_FIELD); INFO_FIELD *p_nuovodato; strcpy (p_nuovodato->nome,"pene"); p_nuovodato->eta = 5; head = (struct PERSONA *) creaLista(); puts ("Inserisci dato in testa"); insL_testa (len_info,p_nuovodato,&head); print (&head); puts ("Inserisci dato dopo nodo corrente"); //insL_nodo (len_info,p_nuovodato,&punt); puts ("Elimina in testa"); eliL_testa (&head); puts ("Elimina nodo corrente"); //eliL_nodo (&prec); //prec è nodo precedente a quello da eliminare puts(""); system ("pause"); } void *creaLista() {char *testa; testa=NULL; return testa; } void insL_testa (short len_info,INFO_FIELD *p_dato, void **p_head) {struct lista {INFO_FIELD info; struct lista *p_next; } *ptr; ptr=calloc (1,sizeof (struct lista)); memcpy (ptr,p_dato,len_info); ptr->p_next=(struct lista *)*p_head; *p_head = ptr; } void insL_nodo(short len_info,INFO_FIELD *p_dato,void** p_punt){ struct lista { INFO_FIELD info; struct lista *p_next; } *ptr; //condivide solo INFOFIELD con il main ptr = calloc (1,sizeof(struct lista)); memcpy (ptr,p_dato,len_info); /* copia len info byte da * p dato a ptr senza tener conto * della struttura delle informazioni */ ptr->p_next = ((struct lista*)*p_punt)->p_next; ((struct lista*)*p_punt)->p_next = ptr; *p_punt = ptr; /* Il cast è obbligatorio prima di usare un puntatore * generico, ma non quando lo si definisce */ } void eliL_testa (void** p_head) { struct lista { INFO_FIELD info; struct lista *p_next; }*ptr; ptr = ((struct lista*)*p_head)->p_next; free ((struct lista*)*p_head); *p_head = ptr; } void eliL_nodo (void ** p_punt) { struct lista { INFO_FIELD info; struct lista *p_next; }*ptr; ptr = ((struct lista*)*p_punt) -> p_next; ((struct lista*)*p_punt) -> p_next = ptr->p_next; free (ptr); } void print (struct PERSONA* head) { while (head->next != NULL) { printf ("%s",head->nome); printf (" %d",head->eta); head = head->next; } }
Innanzitutto non capisco quale tipo deve assumere la variabile *p_nuovodato che sarebbe il dato da inserire nella lista.
Poi non capisco alcuni parametri passati alle funzioni.
Il paramentro &punt passato ad ins_nodo;
il parametro &prec passato a eli_nodo;
Spero possiate aiutarmi o almeno darmi una dritta.
Grazie anticipatamente
aaa