#include #include #include #define MAXN 14 #define MAXV 11 typedef struct NAMIRNICE { char naziv[MAXN]; char vrsta[MAXV]; unsigned kol; struct NAMIRNICE *levi; struct NAMIRNICE *desni; }NAMIRNICE; FILE *SafeOpen(char Ime[],char Mod[],int error) { FILE *fp=fopen(Ime,Mod); if(fp==NULL) { printf("Nije moguce otvoriti fajl"); exit(error); } return fp; } void Inicijalizacija(NAMIRNICE **koren) { *koren=NULL; } NAMIRNICE *KreirajCvor(char naziv[],char vrsta[],unsigned kol) { NAMIRNICE *novi=(NAMIRNICE *)malloc(sizeof(NAMIRNICE)); if(novi==NULL) { printf("Nema dovoljno RAM-a"); exit(21); } strcpy(novi->naziv,naziv); novi->kol=kol; strcpy(novi->vrsta,vrsta); novi->levi=NULL; novi->desni=NULL; return novi; } void SpojiCvor(NAMIRNICE **koren,NAMIRNICE *novi) { if(*koren==NULL) { *koren=novi; return; } if((*koren)->kol<=novi->kol) { SpojiCvor(&((*koren)->desni),novi); } if((*koren)->kol>novi->kol) { SpojiCvor(&((*koren)->levi),novi); } } void Ucitaj(NAMIRNICE **koren,FILE *ulaz) { char naziv[MAXN]; char vrsta[MAXV]; unsigned kol; while(fscanf(ulaz,"%s %u %s",naziv,&kol,vrsta)!=EOF) { NAMIRNICE *novi=KreirajCvor(naziv,vrsta,kol); SpojiCvor(koren,novi); } } void SacuvajStablo(NAMIRNICE *koren,FILE *izlaz) { if(koren!=NULL) { SacuvajStablo(koren->desni,izlaz); fprintf(izlaz,"%u %s %s\n",koren->kol,koren->naziv,koren->vrsta); SacuvajStablo(koren->levi,izlaz); } } void NajviseC(NAMIRNICE *koren,FILE *izlaz) { if(koren==NULL) { printf("Stablo je prazno"); return; } if(koren->desni==NULL) { fprintf(izlaz,"Najvise vitamina C ima:\n%u %s %s",koren->kol,koren->naziv,koren->vrsta); } else { NajviseC(koren->desni,izlaz); } } void UnistiStablo(NAMIRNICE **koren) { if(*koren!=NULL) { UnistiStablo(&((*koren)->levi)); UnistiStablo(&((*koren)->desni)); free(*koren); *koren=NULL; } } int main(int brArg,char *Arg[]) { NAMIRNICE *koren; if(brArg!=3) { printf("Niste uneli odgovrajuc broj argumenata"); exit(42); } char *ulaz_ime=Arg[1]; FILE *ulaz=SafeOpen(ulaz_ime,"r",1); char *izlaz_ime=Arg[2]; FILE *izlaz=SafeOpen(izlaz_ime,"w",2); Inicijalizacija(&koren); Ucitaj(&koren,ulaz); SacuvajStablo(koren,izlaz); NajviseC(koren,izlaz); UnistiStablo(&koren); fclose(ulaz); fclose(izlaz); return 0; }