[C] Albero di STRUCT

m45511
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:

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
m45511
Pensate che questa soluzione possa andar bene?

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?

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.

m45511
"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?

m45511
Ho trovato l'errore, ci mancava un NULL!!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.