You are on page 1of 7

Algoritmiistrukturepodataka2015./2016.

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);

Funkcije dodaji skinivraaju1akojeoperacijadodavanjailiskidanjauspjela,a0inae.Elementi


reda su podaci tipa Element. Tipovi Element i Red definirani su redom sljedeim programskim
odsjekom:

#defineMAXNIZ20 typedefstructat{ typedefstruct{


typedefstructElement{ Elementelement; atom*ulaz;
charniz[MAXNIZ+1]; structat*sljed; atom*izlaz;
}Element; }atom; }Red;
Napiite funkciju koja e iz zadanog reda u novi red kopirati sve elemente ija varijablaniz sadri
podnizkojifunkcijaprimikaoulazniargument.Funkcijapozivateljuvraatajnovired,aprototipjoj
je:

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);

Funkcijedodajiskinivraaju 1 ako je operacija dodavanja ili skidanja uspjela, a 0 inae.

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;
}

You might also like