You are on page 1of 14

PROGRAMIRANJE II

A12 Stek, red i kruni bafer


dr Draen Branin (bdrazen@etfbl.net)
Goran Banjac(goran.banjac@etfbl.net)
Danijela Banjac (danijela.banjac@etfbl.net)
Aleksandar Kele
(aleksandar.kelec@etfbl.net)

2015.

A1
STEK
2
Napisati program u kojem treba:
definisati linearnu strukturu sa LIFO disciplinom pristupa (STEK)
koja slui za smjetanje cijelih brojeva, pri emu je potrebno
koristiti sekvencijalnu reprezentaciju steka,
definisati funkciju koja stavlja broj na stek,
definisati funkciju koja skida broj sa steka,
definisati funkciju koja provjerava da li je stek prazan,
definisati funkciju koja provjerava da li je stek pun,
definisati funkciju koja skida sve brojeve sa steka i prebacuje ih
#uinniz,
clu d e < std io.h >
in t p u sh (S TEK *s, in t p od atak)
clu d e < std li
b .h >
#uinglavnom
programu
ilustrovati rad sa stekom
tj. definisanim
{
# d ef i
n e M A X 10
funkcijama.
if (isFu ll(s)) retu rn 0;
typ ed ef stru ct stek {
in t n iz[M A X ];
in t tos;
} S TEK ;
in t isFu ll(S TEK *s) { retu rn s-> tos = = M A X - 1; }
in t isEm p ty(S TEK *s) { retu rn s-> tos = = -1; }
Stek, red i kruni bafrer

s-> n iz[+ + s-> tos] = p od atak;


retu rn 1;
}
in t p op (S TEK *s, in t *p od atak)
{
if (isEm p ty(s)) retu rn 0;
*p od atak = s-> n iz[s-> tos--];
retu rn 1;
}

A1
STEK
2
in t* isp razn iS tek(S TEK *s) {
if (isEm p ty(s)) retu rn 0;
in t i = 0, *n iz = (in t *)m alloc((s->
tos + 1)
* sizeof(i
t));
Stavljanje
prvih
10 nprirodnih
brojeva na
w h ile (!isEm p ty(s)) n iz[i+ + stek...
] = s-> n iz[s-> tos--]; // p op (s, n iz + i+ + );
retu rn n iz;
Na stek je stavljen broj: 1
}
Na stek je stavljen broj: 2
in t m ain () {
stek
jestek.
stavljen
broj: 3
in t i, p od atak, n , *rezu ltat;Na
S TEK
stek;
tos = -1;
Na
stek
broj:
p rin tf("S tavljan je p rvih 10 p
rirod
n ih je
b rojstavljen
eva n a stek.
..\n ");4
for (i = 1; i < = 10; i+ + )
Na stek je stavljen broj: 5
if (p u sh (& stek, i)) p rin tf("N
stavl
jen b roj:broj:
% d \n ",6
i);
Naa stek
stekjeje
stavljen
if (isFu ll(& stek)) {
Na stek je stavljen broj: 7
p rin tf("S tek je p u n !\n "); p rin tf("P oku saj stavljan ja n a p u n stek...\n ");
Na stek je stavljen broj: 8
if (p u sh (& stek, i)) p rin tf("N a stek je stavljen b roj: % d \n ", i);
Na
je stavljen broj: 9
else p rin tf("G reska! S tek j
e p stek
u n .\n ");
Na stek je stavljen broj: 10
}
Stek
pun!
p rin tf("P oku saj skid an ja b roj
a sa je
steka.
..\n ");
if (p op (& stek, & p od atak)) pPokusaj
rin tf("S a stavljanja
steka je skin una
t b roj
d \n ", p od atak);
pun: %stek...
p rin tf("N akon skid an ja svihGreska!
b rojeva sa
steka:
n ");
Stek
je \pun.
n = stek.tos + 1; rezu ltat =Pokusaj
isp razn iSskidanja
tek(& stek);
elementa sa steka...
for (i = 0; i < n ; i+ + ) p rin tf("% d ", rezu ltat[i]);
Sa steka je skinut broj: 10
free(rezu ltat);
Nakon
skidanja
if (isEm p ty(& stek)) p rin tf("\
n S tek j
e p razan !\nsvih
"); brojeva sa steka:
9 8 7 6 5 4 3 2 1
retu rn 0;
Stek je prazan!
}
Stek, red i kruni bafrer

A1
STEK
2
Napisati program u kojem treba:
definisati tip ARTIKAL kojim se reprezentuje artikal (podaci koji
se vode o artiklu su: naziv, koliina i cijena),
definisati linearnu strukturu sa LIFO disciplinom pristupa (STEK)
koja slui za smjetanje artikala, pri emu je potrebno koristiti
ulananu reprezentaciju steka,
definisati funkciju koja stavlja novi artikal na stek,
definisati funkciju koja skida artikal sa steka,
# definisati
funkciju
koja formatirano ispisuje podatke o svim
in clu d e < std i
o.h >
#artiklima.
in clu d e < std lib .h >
typ ed ef stru ct { ch ar n aziv[21]; d ou b le kol, cijen a; } A R TIK A L;
typ ed ef stru ct cvor { A R TIK A L art; stru ct cvor *sljed eci; } C V O R ;
void p u sh (C V O R **tos, A R TIK A L *art) {
C V O R *n ovi = (C V O R *)m alloc(sizeof(C V O R ));
n ovi-> art = *art;
n ovi-> sljed eci = *tos;
*tos = n ovi;
}

Stek, red i kruni bafrer

in t p op (C V O R **tos, A R TIK A L *art)


{
if (*tos = = 0) retu rn 0;
C V O R *p = *tos;
*art = p -> art;
*tos = p -> sljed eci;
free(p );
retu rn 1;
}

A1
STEK
2
void p isi(C V O R **tos) {
A R TIK A L art; in t rb = 1;
p rin tf("--- -------------------- ------ ------ ------\n ");
p rin tf("R B . N A Z IV
K O L. C IJEN A U K U P N O \n ");
p rin tf("--- -------------------- ------ ------ ------\n ");
n=2
w h ile (p op (tos, & art))
na stek...
p rin tf("% 2d . % -20s % 6.2lf % 6.Stavljanje
2lf % 6.2lf\n ",artikala
rb + + ,
1.
art.n aziv, art.kol, art.cijen a, Podaci
art.kol * o
art.
cijartiklu:
en a);
Naziv:
p rin tf("--- -------------------- ------ -----------\nBanane
");
}
Kolicina: 2
void citaj(A R TIK A L *art) {
Cijena: 1.5
p rin tf(" N aziv: "); scan f("% s", art->
n azio
v);2. artiklu:
Podaci
p rin tf(" K olicin a: "); scan f("% lf", & art-> kol);
Naziv: Jabuke
p rin tf(" C ijen a: "); scan f("% lf", & art-> cijen a);
Kolicina: 3
}
Cijena: 1.2
in t m ain () {
artikala sa steka i njihov
in t i, n ; C V O R *tos = 0; A R TIK A LSkidanje
art;
d o p rin tf("n = "), scan f("% d ", & nispis...
); w h ile (n < 1);
p rin tf("S tavljan je artikala n a stek.
n ");
---..\------------------------- -----for (i = 0; i < n ; i+ + )
-----p rin tf("P od aci o % d . artiklu :\n ", i + 1), citaj(& art), p u sh (& tos, & art);
RB. NAZIV
KOL.
CIJENA
p rin tf("S kid an je artikala sa steka i n jih ov isp is...\n ");
UKUPNO
p isi(& tos);
--- -------------------- ------ -----retu rn 0;
-----}
Stek, red i kruni bafrer

1. Jabuke
3.60

3.00

1.20

A1
RED
2
Napisati program u kojem treba:
definisati linearnu strukturu sa FIFO disciplinom pristupa (RED)
koja slui za smjetanje cijelih brojeva, pri emu je potrebno
koristiti sekvencijalnu reprezentaciju reda,
definisati funkciju koja dodaje novi broj u red,
definisati funkciju koja brie broj iz reda,
definisati funkciju koja provjerava da li je red prazan,
definisati funkciju koja provjerava da li je red pun,
definisati funkciju koja ispisuje sve brojeve iz reda,
clu d e < std io.
h>
#uinglavnom
programu
ilustrovati rad sainredom
t d od aj(Rtj.
ED definisanim
*red , in t p od atak) {
# in clu d e < std lib .h >
if (isFu ll(red )) retu rn 0;
#funkcijama.
d ef i
n e M A X 100
typ ed ef stru ct red {
in t n iz[M A X ]; in t f, r;
} R ED ;
in t isFu ll(R ED *red ) { retu rn red -> r = = M A X ; }
in t isEm p ty(R ED *red ) {
retu rn red -> f = = -1 || red -> f = = red -> r;
}
Stek, red i kruni bafrer

if (red -> f = = -1) red -> f = 0;


red -> n iz[red -> r+ + ] = p od atak;
retu rn 1;

}
in t ob risi(R ED *red , in t *p od atak) {
if (isEm p ty(red )) retu rn 0;
*p od atak = red -> n iz[red -> f+ + ];
retu rn 1;
}
6

A1
RED
2
void p isi(R ED *red ) {
if (red -> f != -1)
for (in t i = red -> f; i < red -> r; i+ + )
p rin tf("% d ", red -> n iz[i]);
}
in t m ain () {
R ED red ; red .f = -1; red .r = 0;
in t p od atak, i;
for (i = 1; i < = 10; i+ + )
d od aj(& red , i);
p rin tf("P rikaz red a: ");
p isi(& red );
if (ob risi(& red , & p od atak)) {
p rin tf("\n O b risan b roj % d iz red a.", p od atak);
p rin tf("\n P rikaz red a n akon b risan ja: ");
p isi(& red );
}
Prikaz reda: 1 2 3 4 5 6 7 8 9 10
else
p rin tf("G reska! R ed je p razan
."); broj 1 iz reda.
Obrisan
p rin tf("\n U n esite b roj kojiPrikaz
zelite d od
ati unakon
red : ");
scan f("% d ",
od 5
atak);
reda
brisanja:
2 &3p 4
6 7 8 9 10
p rin tf("B roj % d % sd od at uUnesite
red .\n ", p
od
atak,
d
od
aj
(&
red
,
p
od
atak)
?
""
broj koji zelite dodati u red:: "n
22ije ");
p rin tf("P rikaz red a n akon d od avan ja: ");
Broj 22 dodat u red.
p isi(& red );
Prikaz reda nakon dodavanja: 2 3 4 5 6 7 8 9 10
retu rn 0;
22
}
Stek, red i kruni bafrer

A1
RED
2
Napisati program u kojem treba:
definisati tip STUDENT kojim se reprezentuje student (podaci
koji se vode o studentu su: indeks, prezime, ime i prosjek),
definisati linearnu strukturu sa FIFO disciplinom pristupa (RED)
koja slui za smjetanje podataka o studentima, pri emu je
potrebno koristiti ulananu reprezentaciju reda,
definisati tip CVOR kojim se reprezentuje element reda,
definisati funkciju koja dodaje novog studenta u red,
definisati funkciju koja brie studenta iz reda,
definisati funkciju koja brie sve studente iz reda,
definisati funkciju koja formatirano ispisuje podatke o svim
studentima koji su u redu,
definisati funkciju koja omoguava uitavanje podataka o
studentu,
u glavnom programu prikazivati meni prema kojem korisnik
moe da vri:
dodavanje podataka o novom studentu,
brisanje podataka,
prikaz podataka o svim studentima,
Stek, red i kruni bafrer

A1
RED
2
# in clu d e < std io.h >
# in clu d e < std lib .h >
typ ed ef stru ct { ch ar in d eks[8], p rezim e[21], im e[21]; d ou b le p rosjek; } S TU D EN T;
typ ed ef stru ct cvor { S TU D EN T s; stru ct cvor *sljed eci; } C V O R ;
void d od aj(C V O R **p f, C V O R **p r, S TU D EN T *s) {
C V O R *n ovi = (C V O R *)m alloc(sizeof(C V O R ));
n ovi-> s = *s;
n ovi-> sljed eci = 0;
if (*p f = = 0) *p f = *p r = n ovi;
void b risi_red (C V O R **p f, C V O R **p r)
else {
{
(*p r)-> sljed eci = n ovi;
S TU D EN T p om ;
*p r = n ovi;
w h ile (b risi(p f, p r, & p om ));
}
}
}
in t b risi(C V O R **p f, C V O R **p r, S TU D EN T *s) { void citaj(S TU D EN T *s) {
if (*p f = = 0) retu rn 0;
p rin tf(" In d eks: ");
C V O R *p = *p f;
scan f("% s", s-> in d eks);
*s = p -> s;
p rin tf(" P rezim e: ");
if (*p f = = *p r) *p f = *p r = 0;
scan f("% s", s-> p rezim e);
else *p f = p -> sljed eci;
p rin tf(" Im e: ");
free(p );
scan f("% s", s-> im e);
retu rn 1;
p rin tf(" P rosjek: ");
}
scan f("% lf", & s-> p rosjek);
}

Stek, red i kruni bafrer

A1
RED
2
void p isi(C V O R *f) {
====================================================
in t rb = 1;
Dodavanje
[D], brisanje
[B],
prikaz [P], kraj [0]? D
p rin tf("--- ------- ---------------------------------------------\
n ");
p rin tf("R B . IN D EK S P R EZ IM E Unesite podatke:
IM E
P R O S JEK \n ");
Indeks:
1102/14
p rin tf("--- ------- -------------------- -------------------- -------\n ");
Prezime: Bojanic
w h ile (f) {
p rin tf("% 2d . % s % -20s % -20s %Ime:
7.2lBojana
f\n ", rb + + , f-> s.in d eks, f-> s.p rezim e,
Prosjek: 10
f-> s.im e, f-> s.p rosjek);
====================================================
f = f-> sljed eci;
Dodavanje [D], brisanje [B], prikaz [P], kraj [0]? D
}
Unesite podatke:
p rin tf("--- ------- --------------------Indeks:
-------------------1101/14 -------\n ");
}
Prezime: Markovic
in t m ain () { C V O R *f = 0, *r = 0; Ime:
ch ar Marko
c; S TU D EN T s;
do {
Prosjek: 9.5
====================================================
P===
p rin tf("= = = = = = = = = = = = = = =Dodavanje
= = = = = = [D],
= = = =brisanje
= = = = = =[B],
= = =prikaz
= = = = =[P],
= = =kraj
= = = [0]?
====
--- ------- -------------------- -------------------\n ");
------p rin tf("D od avan je [D ], b risan
je [B ], p rikaz [P ], kraj [0]? "); scan f("\n % c", & c);
RB.
PREZIME
IME
if (c = = 'D ') { p rin tf(" U n esiteINDEKS
p od atke:\
n "); citaj(& s); d od aj
(& f, & r, & s); }
PROSJEK
else if (c = = 'B ') {
--- ------- -------------------- -------------------if (b risi(& f, & r, & s)) p rin tf(" O b risan i su p od aci o stu d en tu % s, % s!\n ",
------s.p rezim e, s.im e);
1. 1102/14 Bojanic
Bojana
else p rin tf(" G reska! R ed10.00
je p razan .\n ");
}
2. 1101/14 Markovic
Marko
else if (c = = 'P ') p isi(f); 9.50
else if (c != '0') p rin tf(" N ep
ata op-------------------cija - '% c'.\n ", c);
---ozn
-------------------------Stek, red i kruni bafrer
10
} w h ile (c != '0'); b risi_red (&
f, & r); p rin tf("K R A J!\n "); retu rn 0; }
-------

A1
KRUNI BAFER
2
Napisati program u kojem treba:
definisati linearnu strukturu kruni bafer koja slui za
smjetanje cijelih brojeva, pri emu je potrebno koristiti
sekvencijalnu reprezentaciju bafera, bez prepisivanja,
definisati funkciju koja dodaje novi broj u bafer,
definisati funkciju koja brie broj iz bafera,
definisati funkciju koja provjerava da li je bafer prazan,
definisati funkciju koja provjerava da li je bafer pun,
definisati funkciju koja ispisuje sve brojeve iz bafera,
u glavnom programu prikazivati meni prema kojem korisnik
moe da vri:
dodavanje broja u bafer,
brisanje
iz bafera,
# inclu
d e < std io.broja
h>
# inclu
d e < stdsvih
lib .h > brojeva u baferu.
prikaz
# d ef i
ne M A X 5

typ ed ef stru ct red { in t n iz[M A X ]; in t f, r; } R ED ;


in t isFu ll(R ED *b afer) { retu rn (b afer-> r + 1) % M A X = = b afer-> f; }
in t isEm p ty(R ED *b afer) { retu rn b afer-> f = = -1; }
Stek, red i kruni bafrer

11

A1
KRUNI BAFER
2
in t d od aj(R ED *b afer, in t p od atak)
{
if (isFu ll(b afer))
retu rn 0;
if (b afer-> f = = -1)
b afer-> f = 0;
b afer-> r = (b afer-> r + 1) % M A X ;
b afer-> n iz[b afer-> r] = p od atak;
retu rn 1;
}
in t b risi(R ED *b afer, in t *p od atak)
{
if (isEm p ty(b afer))
retu rn 0;
*p od atak = b afer-> n iz[b afer-> f];
if (b afer-> f = = b afer-> r)
b afer-> f = b afer-> r = -1;
else
b afer-> f = (b afer-> f + 1) % M A X ;
retu rn 1;
}

Stek, red i kruni bafrer

in t p isi(R ED *b afer) {
if (isEm p ty(b afer))
retu rn 0;
in t i = b afer-> f;
if (b afer-> f < = b afer-> r)
{
w h ile (i < = b afer-> r)
p rin tf("% d ", b afer-> n iz[i+ + ]);
}
else
{
w h ile (i < = M A X - 1)
p rin tf("% d ", b afer-> n iz[i+ + ]);
i = 0;
w h ile (i < = b afer-> r)
p rin tf("% d ", b afer-> n iz[i+ + ]);
}
retu rn 1;
}

12

A1
KRUNI BAFER
2
in t m ain () { R ED b afer; b afer.f = ===================================================
b afer.r = -1; ch ar c; in t b roj;
do {
Dodavanje[D], brisanje [B], prikaz [P], kraj [0]? D
Unesite broj: 1

p rin tf("= = = = = = = = = = = = = = = = = = = = = =.= .= =. = = = = = = = = = = = = = = = = = = = = = = = = = = \


n ");
===================================================
p rin tf("D od avan je[D ], b risan jeDodavanje[D],
[B ], p rikaz [P brisanje
], kraj [0]?
");prikaz [P], kraj [0]? D
[B],
scan f("\n % c", & c);
Unesite broj: 5
===================================================
if (c = = 'D ') {
Dodavanje[D], brisanje [B], prikaz [P], kraj [0]? D
p rin tf(" U n esite b roj: ");
Unesite broj: 6
scan f("% d ", & b roj);
Bafer
pun!je p u n !\n ");
if (d od aj(& b afer, b roj) = = 0) p ri
n tf(" je
B afer
===================================================
}
Dodavanje[D], brisanje [B], prikaz [P], kraj [0]? P
else if (c = = 'B ') {
Sadrzaj bafera: 1 2 3 4 5
if (b risi(& b afer, & b roj))
===================================================
p rin tf(" O b risan je b roj: % d Dodavanje[D],
\n ", b roj);
brisanje [B], prikaz [P], kraj [0]? B
else p rin tf(" B afer je p razan !\nObrisan
");
je broj: 1
}
===================================================
else if (c = = 'P ') {
Dodavanje[D], brisanje [B], prikaz [P], kraj [0]? D
p rin tf(" S ad rzaj b afera: ");
Unesite broj: 6
if (p isi(& b afer) = = 0)
===================================================
brisanje [B], prikaz [P], kraj [0]? P
p rin tf("\n B afer je p razan !\nDodavanje[D],
");
Sadrzaj bafera: 2 3 4 5 6
else p rin tf("\n ");
====================================================
}
Dodavanje
[D],
[B], prikaz [P], kraj [0]? 0
else if (c != '0') p rin tf(" N ep ozn
ata op cij
a - '%brisanje
c'.\n ", c);
KRAJ!
} w h ile (c != '0');
p rin tf("K R A J!\n "); retu rn 0;
Stek, red i kruni bafrer
13
}

A1
ZADACI ZA VJEBU
2
1. Napisati program koji ita rijei iz datoteke iji se naziv navodi
kao prvi argument komandne linije i upisuje ih nazad u
datoteku, ali u obrnutom poretku. Za uvanje rijei u
programu potrebno je koristiti ulananu reprezentaciju steka.
2. Napisati program koji provjerava da li je unesena rije
palindrom pomou steka. Potrebno je koristiti sekvencijalnu
reprezentaciju steka.
3. Napisati program koji ilustruje rad prioritetnog reda. U red je
potrebno smijetati studente, pri emu studenti sa veim
prosjekom imaju vii prioritet, tj. potrebno je da se nalaze u
redu ispred studenata sa niim prioritetom. Definisati tip
STUDENT kojim se reprezentuje student (podaci koji se vode o
studentu su: indeks, prezime, ime i prosjek).
4. Napisati program za obradu artikala. Potrebno je koristiti
kruni bafer za uvanje artikala. Artikal se smatra obraenim
nakon to se doda u kruni bafer, tako da nakon obrade vie
nije potreban, tj. mogue ga je prebrisati novim artiklom koji
doe u bafer. Definisati tip ARTIKAL kojim se reprezentuje
artikal (podaci koji se vode o artiklu su: naziv, koliina i
Stek, red i kruni bafrer
14

You might also like