[C] Albero di STRUCT
Salve, ho sempre trattato alberi di interi quindi adesso mi trovo in difficoltà.
Devo creare un albero di struct, ogni struct contiene nome e cognome di una persona. Io ho fatto in questo modo:
Quando creo l'albero provo a fare questo:
Il compilatore mi dice "la struttura non ha nessun membro Persona" quindi sbaglio proprio l'idea di fondo.
Qualcuno può spiegarmi come fare?
Grazie per l'attenzione.
Devo creare un albero di struct, ogni struct contiene nome e cognome di una persona. Io ho fatto in questo modo:
struct persona{ char nome[10]; char cognome[10]; }; struct albero{ struct persona; struct albero *s,*d; }; typedef struct albero *tipoalbero;
Quando creo l'albero provo a fare questo:
tipoalbero make_albero (int n) { tipoalbero a; if(n==0) return; a=malloc(sizeof(struct albero)); a->persona.nome="massimo" a->persona.cognome="rossi" a->s=make_albero(n-1); a->d=make_albero(n-1); return a; }
Il compilatore mi dice "la struttura non ha nessun membro Persona" quindi sbaglio proprio l'idea di fondo.
Qualcuno può spiegarmi come fare?
Grazie per l'attenzione.
Risposte
Pensate che questa soluzione possa andar bene?
Così funziona, secondo voi è corretto?
struct persona{ char nome[10]; char cognome[10]; }; typedef struct persona *tipopersona; struct albero{ tipopersona p; struct albero *s,*d; }; typedef struct albero *tipoalbero;
tipoalbero make_albero (int n) { tipoalbero a; if(n==0) return; a=malloc(sizeof(struct albero)); printf("inserisci il nome: \n"); scanf("%s", a->p->nome); printf("inserisci il conome: \n"); scanf("%s", a->p->cognome); a->s=make_albero(n-1); a->d=make_albero(n-1); return a; }
Così funziona, secondo voi è corretto?
Il primo era “quasi” corretto. Solo che struct persona è solo il tipo, insomma è come se avessi scritto int; quindi ti bastava scrivere struct persona p;
Nel secondo tentativo hai inserito la struct persona come un puntatore e non lo considero ottimale. Inoltre potrebbe darti qualche problema se non stai attento.
Nel secondo tentativo hai inserito la struct persona come un puntatore e non lo considero ottimale. Inoltre potrebbe darti qualche problema se non stai attento.
"vict85":
Il primo era “quasi” corretto. Solo che struct persona è solo il tipo, insomma è come se avessi scritto int; quindi ti bastava scrivere struct persona p;
Nel secondo tentativo hai inserito la struct persona come un puntatore e non lo considero ottimale. Inoltre potrebbe darti qualche problema se non stai attento.
Perfetto ho capito, ma perchè questo tipo di stampa non funziona??
void pre (tipoalbero a) { if(a==NULL) return; printf("%s ", a->p.nome); pre(a->s); pre(a->d); }
Forse c'è un errore nella ricorsione durante la creazione dell'albero?
Ho trovato l'errore, ci mancava un NULL!!