codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct albero* albero_t;
struct albero
{
char* nome;
int N;
int annonascita;
int annomorte;
int ID;
albero_t destro;
albero_t sinistro;
};
albero_t costruiscialbero(albero_t il, char* nome, int ID, int annonascita, int annomorte);
void stampalbero(albero_t il);
albero_t ricerca(albero_t il,char* nomel);
char* personalongeva(albero_t il);
int main(int argc, char *argv[])
{
FILE* fp;
albero_t il; albero_t nodo; il=NULL, nodo=NULL; char* nome; int ID; int annonascita; int annomorte; nome=malloc(sizeof(char)*256);
fp=fopen("albero.txt","r");
if (fp==NULL)
{
printf("Errore nell'apertura del file\n");
return 0;}
while(!feof(fp)){
fscanf(fp,"%256[^ ] %d %d %d\n",nome,&ID,&annonascita,&annomorte);
il=costruiscialbero(il,nome,ID,annonascita,annomorte); }
stampalbero(il);
char* lung; lung=malloc(sizeof(char)*256);
lung=personalongeva(il); printf("\nil piu' longevo e' %s\n",lung);
char* nomel; nomel=malloc(sizeof(char)*256); int n;
printf("\nInserisci il nome da cercare\n"); scanf("%s", nomel);
nodo=ricerca(il,nomel);
if (nodo==NULL) printf("\nNon esiste\n");
else printf("\n%s->%d->%d->%d\n",nodo->nome,nodo->ID,nodo->annonascita,nodo->annomorte);
system("PAUSE");
return 0;
}
char* personalongeva(albero_t il)
{
int x; char* nomes; nomes=malloc(sizeof(char)*256);
if(il!=NULL)
{
if(((il->annomorte) - (il->annonascita)) > x)
{
x=((il->annomorte) - (il->annonascita));
strcpy(nomes,il->nome);}
personalongeva(il->destro);
personalongeva(il->sinistro);
}return nomes;}
albero_t costruiscialbero(albero_t il, char* nome, int ID, int annonascita, int annomorte)
{
if (il==NULL)
{
il=malloc(sizeof(struct albero));
il->nome=malloc(sizeof(char)+256);
strcpy(il->nome,nome);
il->ID=ID;il->annonascita=annonascita;il->annomorte=annomorte;il->destro=NULL,il->sinistro=NULL;
}
else if(ID < il->ID) il->sinistro=costruiscialbero(il->sinistro,nome,ID,annonascita,annomorte);
else if(ID > il->ID) il->destro=costruiscialbero(il->destro,nome,ID,annonascita,annomorte);
else printf("elemento già inserito\n");
return(il);
}
void stampalbero(albero_t il)
{
if(il!=NULL){
printf("%s->%d->%d->%d\n",il->nome,il->ID,il->annonascita,il->annomorte);
stampalbero(il->destro);
stampalbero(il->sinistro);}}
albero_t ricerca(albero_t il, char* nomel)
{
if ((il == NULL)|| strcmp(il->nome,nomel)==0)
return il;
if(strcmp(il->nome,nomel)< 0) return ricerca(il->sinistro, nomel);
else return ricerca(il->destro, nomel);}
Tutto funziona tranne la funzione per cercare la persona più longeva (sottolineata in grassetto). Come mai? Grazie in anticipo!