- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- #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;
- }