Newsgroup: it.comp.lang.c
Titolo: ALBERO BINARIO E fscanf

Salve
ho difficoltà ad inserire in una struttura del tipo
dati{
    char nomi;
    int età;
    int peso;
    }
dei dati presi con una fscanf da un file di testo del dipo
giancarlo   25     79
serena       40    56
giudo         27    80
elena         30    70
EOF
e trattarli come albero binario
chi mi aiuta mi tira fuori da un bel rompicapo
grazie
giancarlo
--
Posted from 
mta03-acc.tin.it
 [212.216.176.34]
via Mailgate.ORG Server - 
http://www.mailgate.org

e trattarli come albero binario
/**************************************************************************
 * BTREE04.C - Illustra l'inserimento e la scrittura in un albero binario *
 * ---------------------------------------------------------------------- *
 * ALCLIB v1.0 - Andrea Laforgia C Library                                *
 * (C)1999 Andrea Laforgia (
andrea_...@bigfoot.com
)                  *
 **************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
const char dati_su_file[][24] = {
                                "Celeste  Umberto  88 64",
                                "Violetto Alessio  24 85",
                                "Rossi    Giuseppe 50 77",
                                "Verdi    Filippo  32 80",
                                "Gialli   Federico 65 75",
                                "Bianchi  Marco    44 65"
                              } ;
/* e' come il test di guida con un manichino ! ;) */
typedef struct {
                 char cognome[30] ;
                 char nome[30] ;
                 int  eta ;
                 int  peso ;
               } dati ;
typedef struct foglia {
                       dati   persona ;
	               struct foglia * sotto_albero_sinistro ;
           	       struct foglia * sotto_albero_destro ;
	              } * ptr_foglia ;
void inserisci_persona( dati record, ptr_foglia * radice )
{
     if (*radice == NULL)
     {
        *radice = malloc( sizeof( struct foglia ) );
        strcpy((*radice)->persona.cognome, record.cognome) ;
        strcpy((*radice)->persona.nome, record.nome) ;
        (*radice)->persona.eta = record.eta ;
        (*radice)->persona.peso = record.peso ;
        (*radice)->sotto_albero_sinistro = NULL;
        (*radice)->sotto_albero_destro = NULL;
     }
     else
     if (strcmp(record.cognome, (*radice)->persona.cognome) < 0)
	inserisci_persona( record, &(*radice)->sotto_albero_sinistro );
     else
	inserisci_persona( record, &(*radice)->sotto_albero_destro );
}
void scrivi_albero ( ptr_foglia radice )
{
     if ( radice )
     {
        scrivi_albero( radice->sotto_albero_sinistro ) ;
        fprintf(stdout, "%s %s di anni %d e peso %d kg\n",
                radice->persona.cognome,
                radice->persona.nome,
                radice->persona.eta,
                radice->persona.peso);
        scrivi_albero( radice->sotto_albero_destro ) ;
     }
}
void distruggi_albero( ptr_foglia * radice )
{
     if ( *radice )
     {
        distruggi_albero ( &(*radice)->sotto_albero_sinistro ) ;
        free ( *radice ) ;
        distruggi_albero ( &(*radice)->sotto_albero_destro ) ;
     }
}
int main()
{
    ptr_foglia  radice_albero = NULL ;
    dati        p ;
    int i ;
    for (i = 0 ; i < 6 ; i++)  /* simula la lettura da un file */
    {
        sscanf(dati_su_file[i], "%s %s %d %d",
               p.cognome, p.nome, &p.eta, &p.peso);
        inserisci_persona ( p, &radice_albero ) ;
    }
    printf("\n\n### DATI ### :\n\n");
    scrivi_albero ( radice_albero ) ;
    distruggi_albero ( &radice_albero ) ;
    return 0;
}
Andrea Laforgia
----
I guai ve li andate a cercare : 
quando Bill Gates annuncio' che avrebbe fatto scrivere 
Windows98 a Topo Gigio perche' non gli avete creduto ?