Professional Documents
Culture Documents
Zadatcizavjebustogired
1. Napiite strukturu podataka koja realizira stog cijelih brojeva poljem ija se veliina moe
dinamikimijenjati.Napiitefunkcijezainicijalizacijustoga,dodavanjeiskidanjeelementa.
2. Napiitefunkcijukojavraaprvilannastogu,alitakodanakonizlaskaizfunkcijetajlanostane
nastogu(peek).Smijusekoristitisamoosnovnefunkcijezaradsastogomdodajiskini.
3. Napiite funkciju koja vraa iti lan na stogu (i = 0 oznaava vrh stoga). Stog nakon izlaska iz
funkcijemoraostatinepromijenjen,asmijusekoristitisamoosnovnefunkcijezaradsastogom
dodajiskini.
4. Zareddefiniranstrukturom:
structat
{
intx;
structat*sljed;
};
typedefstructatatom;
typedefstruct
{
atom*ulaz;
atom*izlaz;
}Red;
napiitefunkcijezadodavanjeibrisanjeelemenataizreda.
5. Napiitefunkcijukojavraaprvilannaizlazuizreda,alitakodanakonizlaskaizfunkcijetajlan
ostanenaredu(peek).Smijusekoristitisamoosnovnefunkcijezaradsredomdodajiskini.
6. Napiitefunkcijukojavraaitilanuredu(i=0oznaavaizlaznilanuredu).Rednakonizlaska
izfunkcijemoraostatinepromijenjen,asmijusekoristitisamoosnovnefunkcijezaradsredom
dodajiskini.
7. (Zavrniispit2012.)
Zaredrealiziranjednostrukopovezanomlistomnapiitefunkcijudodajzadodavanjeelementaured.
Prototipfunkcijeje:
intdodaj(intelement,atom**ulaz,atom**izlaz);
Funkcijatrebavratiti1ukolikojeelementuspjenododanured,a0inae.
Tipatomdefiniranjesljedeimprogramskimodsjekom:
structat{
intelement;
structat*sljed;
};
typedefstructatatom;
8. (Zavrniispit2013.)
ZatippodatkaReddefiniranesufunkcije(nijeihpotrebnopisati)zainicijalizacijureda,dodavanje
elementauredtezaskidanjeelementaizreda.Prototipovinavedenihfunkcijasu:
voidinit_red(Red*red);
intdodaj(Elementelement,Red*red);
intskini(Element*element,Red*red);
Red*trazi(Red*red,char*podniz)
Poredak elemenata u novom redu mora biti isti kao i poredak u ulaznom redu. Po zavretku
izvoenja funkcije, ulazni red mora sadravati iste podatke u istom redoslijedu kao i prije poziva
funkcijetrazi.
Akonpr.zadaniredsadrielementesasljedeimnizovimaznakova:''234dd6'',''aBc569'', ''1234d'',
''ab45de'', a traeni podniz je ''34d'', funkcija mora vratiti novi red iji elementi sadre nizove
''234dd6''i''1234d''.
Napomene:Rjeenjakojaneekoristitizadanefunkcijezaradsredomdonijete0bodova.Moete
koristitipomoneredoveunutarfunkcijetrazi.Skreemopozornostdabifunkcijestrcpyistrstriz
standardneprogramskeknjiniceCamoglebitiodkoristi.
9. (Zavrniispit2013.)
ZadanjetippodatkaStogzakojisudefiniranefunkcijezainicijalizacijustoga,dodavanjeelementana
stog i brisanje elementa sa stoga. Elementi stoga su podaci tipa Student koji sadre prezime
studenta (40 znakova), ime studenta (30 znakova) te broj bodova ostvarenih na predmetu ASP.
Prototipovinavedenihfunkcijasu:
voidinit_stog(Stog*stog);
intdodaj(Studentelement,Stog*stog);
intskini(Student*element,Stog*stog);
a) (1bod) Napiitedefinicijeodgovarajuihstruktura(tipovipodatakaStudent,Stogiatom)za
stogrealiziranvezanomlistom.
b) (5 bodova) Napiite funkciju koja e sa stoga ukloniti sve studente koji imaju broj bodova
manjiodprosjekabodovasvihstudenatanastogu.Redoslijedstudenatakojisuostavljenina
stogu mora biti isti kao i prije poziva funkcije. Funkcija vraa broj studenata uklonjenih sa
stoga.Prototipfunkcijetrebabiti:
intMakniIspodProsjeka(Stog*stog);
Napomene:Rjeenjakojaneekoristitizadanefunkcijezaradsstogomdonijete0bodova.Moete
koristitipomonestogoveunutarfunkcijeMakniIspodProsjeka.
Rjeenja
1.
#defineSTOG_INC10//inkrementkadasenastogunadjepreviseelemenata
typedefstruct
{
intvrh;
intvelicina;
int*polje;
}Stog;
voidstog_init(Stog*stog,intvelicina)
{
stog>vrh=1;
stog>velicina=velicina;
stog>polje=(int*)malloc(velicina*sizeof(int));
if(stog>polje==NULL)stog>velicina=0;
}
intstog_dodaj(Stog*stog,intel)
{
int*p;
//povecajpoljepopotrebi
if(stog>vrh==(stog>velicina1))
{
p=(int*)realloc(stog>polje,stog>velicina+STOG_INC);
if(p==NULL)return0;
stog>polje=p;
stog>velicina+=STOG_INC;
}
//dodajelement
stog>vrh++;
stog>polje[stog>vrh]=el;
return1;
}
intstog_skini(Stog*stog,int*el)
{
if(stog>vrh<0)return0;
*el=stog>polje[stog>vrh];
stog>vrh;
return1;
}
2.
intstog_peek(Stog*stog,int*el)
{
if(!stog_skini(stog,el))return0;
stog_dodaj(stog,*el);
return1;
}
3.
intstog_peek_indeks(Stog*stog,int*el,intindeks)
{
Stogpom;
inti,j,nadjen;
stog_init(&pom,stog>velicina);
nadjen=0;
i=1;
while(stog_skini(stog,&j))
{
stog_dodaj(&pom,j);
i++;
if(i==indeks)
{
nadjen=1;
*el=j;
break;
}
}
while(stog_skini(&pom,&j))stog_dodaj(stog,j);
returnnadjen;
}
4.
structat{
intx;
structat*sljed;
};
typedefstructatatom;
typedefstruct{
atom*ulaz;
atom*izlaz;
}Red;
voidred_init(Red*red)
{
red>ulaz=NULL;
red>izlaz=NULL;
}
intred_dodaj(Red*red,intx)
{
atom*p;
if(!(p=(atom*)malloc(sizeof(atom))))return0;
p>x=x;
p>sljed=NULL;
if(red>ulaz==NULL)
{
red>ulaz=p;red>izlaz=p;
}
else
{
red>ulaz>sljed=p;
red>ulaz=p;
}
return1;
}
intred_skini(Red*red,int*x)
{
atom*p;
if(red>izlaz==NULL)return0;
*x=red>izlaz>x;
p=red>izlaz;
if(p==red>ulaz)
{
red>ulaz=NULL;red>izlaz=NULL;
}
else
{
red>izlaz=red>izlaz>sljed;
}
free(p);
return1;
}
5.
intred_peek(Red*red,int*el)
{
Redpom;
inti;
if(!red_skini(red,&i))return0;
*el=i;
red_init(&pom);
red_dodaj(&pom,i);
while(red_skini(red,&i))red_dodaj(&pom,i);
while(red_skini(&pom,&i))red_dodaj(red,i);
return1;
}
6.
intred_peek_indeks(Red*red,int*el,intindeks)
{
Redpom;
inti,j,nadjen;
nadjen=0;
j=1;
if(!red_skini(red,&i))return0;
j++;
if(j==indeks)
{
*el=i;
nadjen=1;
}
red_init(&pom);
red_dodaj(&pom,i);
while(red_skini(red,&i))
{
j++;
if(j==indeks)
{
*el=i;
nadjen=1;
}
red_dodaj(&pom,i);
}
while(red_skini(&pom,&i))red_dodaj(red,i);
returnnadjen;
}
7.
intdodaj(intelement,atom**ulaz,atom**izlaz){
atom*novi;
if(novi=malloc(sizeof(atom))){
novi>element=element;
novi>sljed=NULL;
if(*izlaz==NULL)
*izlaz=novi;//akojeredbioprazan
else
(*ulaz)>sljed=novi;//inace,stavinakraj
*ulaz=novi;//zapamtizadnjeg
return1;
}
return0;
}
8.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
Red*trazi(Red*red,char*podniz){
Red*rezultat=NULL,pom;
Elementelement;
/*Inicijalizirajredove*/
rezultat=(Red*)malloc(sizeof(Red));
init_red(rezultat);
init_red(&pom);
/*Iteracijaposvimelementimareda*/
while(skini(&element,red)){
/*Provjerisadrzilielementredazadanipodniz*/
if(strstr(element.niz,podniz)){
/*Elementredasadrzipodnizstvorinovielement*/
Elementnovi;
strcpy(novi.niz,element.niz);
/*Dodajnovielementuredkojimoramovratiti*/
dodaj(novi,rezultat);
}
/*Dodajelementnapomocnired*/
dodaj(element,&pom);
}
/*Vratielementenaoriginalnired*/
while(skini(&element,&pom)){
dodaj(element,red);
}
returnrezultat;
}
9.
typedefstruct
{
charPrezime[40+1];
charIme[30+1];
intBodova;
}Student;
structat{
Studentelement;
structat*sljed;
};
typedefstructatatom;
typedefstruct{
atom*vrh;
}Stog;
intMakniIspodProsjeka(Stog*stog){
Stogpom;
Studentel;
intbr=0;floatsum=0;floatpros;
init_stog(&pom);
while(skini(&el,stog)){
sum+=el.Bodova;
br++;
dodaj(el,&pom);
}
pros=sum/br;
br=0;
while(skini(&el,&pom)){
if(pros>=el.Bodova){
dodaj(el,stog);
}else{
br++;
}
}
returnbr;
}