You are on page 1of 39

Algoritmi i Strukture Podataka

Stekovi
Zadatak 1 – primena steka u evaluaciji izraza
Izračunati vrednost izraza datog u postfiksnoj formi:
AB+CD-E^^AE*+
ako promenljive imaju vrednosti:
A=-6, B=4, C=5, D=3, E=2.

Rešenje:
- Na osnovu osobina postfiksnog izraza da operandi neposredno
prethode operatoru i osobine da se poredak operanada ne menja, za
razliku od poretka operatora, generiše se algoritam za izračunavanje
izraza datog u postfiksnoj notaciji.
- Algoritam prirodno koristi stek za smeštanje operanada.

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 2


Beograd
Zadatak 1 - rešenje
EVAL-EXP(postfix) rez = POP(S)
INIT_STACK(S, n) if (STACK-EMPTY(S)) then
while (not_end_of postfix) do return rez
x = INPUT(postfix) else
if (x = operand) then ERROR(Nepravilan izraz)
PUSH(S, x) end_if
else if (x = un_op) then
oprnd = POP(S)
rez = x oprnd
PUSH(S, rez)
else if (x = bin_op) then
oprnd2 = POP(S)
oprnd1 = POP(S)
rez = oprnd1 x oprnd2
PUSH(S, rez)
end_if
end_while

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 3


Beograd
Zadatak 1 - rešenje
input x op1 op2 rez S
A -6 -6
B 4 -6 4
+ + -6 4 -2 -2
C 5 -2 5
D 3 -2 5 3
- - 5 3 2 -2 2
E 2 -2 2 2
^ ^ 2 2 4 -2 4
^ ^ -2 4 16 16
A -6 16 -6
E 2 16 -6 2
* * -6 2 -12 16 -12
+ + 16 -12 4 4
Stek je ostao prazan, dakle, izraz je bio pravilan.
Elektrotehnički fakultet, Algoritmi i Strukture Podataka 4
Beograd
Zadatak 2 – primena steka u obradi
aritmetičkih izraza

Izvršiti konverziju izraza u infiksnog notaciji


(A - C) ^ ((B + C) ^ D ^ E) / C * E
u izraz u postfiksnoj notaciji.
Operator ^ označava stepenovanje.

Izrazi u infiksnoj notaciji su nepogodni za prevodioce (generatore koda),


jer zahtevaju višestruke prolaze kroz izraz
Izrazi u prefiksnoj i postfiksnoj notaciji zahtevaju samo jedan prolaz
Češće se koristi postfiksna notacija jer se jednostavno realizuje stekom
Primer:
A+B*C+E/D  ABC*+ED/+

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 5


Beograd
Zadatak 2 - rešenje
IN2POST(infix, postfix) while not STACK-EMPTY(S) and
INIT-STACK(S,n) (IPR(next) ≤ SPR(TOP(S))) do
rank = 0 x = POP(S)
next = INPUT(infix) OUTPUT(x, postfix)
while (next <> EOF) do rank = rank + R(x)
if (next = operand) then if (rank < 1) then ERROR(Nepravilan izraz)
OUTPUT(next, postfix) end_if
rank = rank + 1 end_while
else if (next ≠ ')') then
PUSH(S, next)
else x = POP(S)
operator ul.pr stek pr. R end_if
+,- 2 2 -1 next = INPUT(infix)
end_while
*,/ 3 3 -1
while not (STACK-EMPTY(S)) do
^ 5 4 -1 x = POP(S)
OUTPUT(x, postfix)
( 6 0 -
rank = rank + R(x)
) 1 - - end_while
if (rank ≠ 1) then
Elektrotehnički fakultet, 6
Beograd
ERROR(Nepravilan izraz)
end_if
Zadatak 2 - rešenje
(A - C) ^ ((B + C) ^ D ^ E) / C * E
next stek postfix rank • next : sledeći podatak
( ( 0 ulaznog niza
• stek : sadržaj steka
A ( A 1
• postfix : izlazni izraz
- (- A 1
• rank : brojač koji proverava
C (- AC 2 korektnost izraza
) AC- 1
^ ^ AC- 1 operator ul.pr st.pr. R
( ^( AC- 1 +,- 2 2 -1
( ^(( AC- 1 *,/ 3 3 -1
B ^(( AC-B 2 ^ 5 4 -1
+ ^((+ AC-B 2 ( 6 0 -
C ^((+ AC-BC 3 ) 1 - -
… … … …

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 7


Beograd
Zadatak 2 - rešenje
(A - C) ^ ((B + C) ^ D ^ E) / C * E
next stek postfix rank • next : sledeći podatak
… … … … ulaznog niza
• stek : sadržaj steka
) ^( AC-BC+ 2
• postfix : izlazni izraz
^ ^(^ AC-BC+ 2
• rank : brojač koji proverava
D ^(^ AC-BC+D 3 korektnost izraza
^ ^(^^ AC-BC+D 3
E ^(^^ AC-BC+DE 4 operator ul.pr st.pr. R
) ^ AC-BC+DE^^ 2 +,- 2 2 -1
/ / AC-BC+DE^^^ 1 *,/ 3 3 -1
C / AC-BC+DE^^^C 2 ^ 5 4 -1
* * AC-BC+DE^^^C/ 1 ( 6 0 -
E * AC-BC+DE^^^C/E 2 ) 1 - -
AC-BC+DE^^^C/E* 1 Rezultat:
Elektrotehnički fakultet, Algoritmi i Strukture Podataka
AC-BC+DE^^C/E*^ 8
Beograd
Zadatak za vežbu
Izvršiti konverziju izraza u infiksnog notaciji
(A+B)^(C-D)^E+A*E
u izraz u postfiksnoj notaciji.
next stek postfix rank next stek postfix rank
( ( 0 ... ... ... ...
A ( A 1 + + AB+CD-E^^ 1
+ (+ A 1 A + AB+CD-E^^A 2
B (+ AB 2 * +* AB+CD-E^^A 2
) AB+ 1 E +* AB+CD-E^^AE 3
^ ^ AB+ 1 AB+CD-E^^AE*+ 1
( ^( AB+ 1
C ^( AB+C 2
- ^(- AB+C 2
D ^(- AB+CD 3 Rezultat: AB+CD-E^^AE*+
) ^ AB+CD- 2
^ ^^ AB+CD- 2
E ^^ AB+CD-E 3
... ... ... ... 9
Zadatak 3
Osmisliti način na koji se stek može proširiti dodatnim
informacijama, tako da se efikasno podrži dohvatanje
minimalne i maksimalne vrednosti na steku. Napisati
pseudokodove za osnovne operacije sa stekom, uz metode
za dohvatanje minimalnog, odnosno maksimalnog elementa,
pod uslovom da se koristi sekvencijalna reprezentacija.
Pokazivač vrha steka pokazuje na poslednju zauzetu
lokaciju na steku.

Rešenje:
– Prolazak kroz sve elemente steka nije efikasno rešenje
– Neefikasno ažuriranje u slučaju čuvanja pokazivača na minimalni
i maksimalni element na steku (prilikom skidanja elemenata sa
steka)
Elektrotehnički fakultet, Algoritmi i Strukture Podataka 10
Beograd
Zadatak 3 - rešenje
• Ideja je da se uz svaki element čuvaju trenutne
minimalne i maksimalne vrednosti na steku – O(1) za
pristup

val min max

5 5 5

3 3 5

4 3 5

8 3 8

1 1 8

10 1 10

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 11


Beograd
Zadatak 3 - rešenje
PUSH(S,x)
if (top[S] = n) then
ERROR(Overflow)
else
if (STACK_EMPTY(S) or x < min(S[top[S]])) then
min = x
else min = min(S[top[S]]))
end_if
if (STACK_EMPTY(S) or x > max(S[top[S]])) then
max = x
else max = max(S[top[S]]))
end_if
top[S] = top[S] +1
val(S[top[S]]) = x
min(S[top[S]]) = min
max(S[top[S]]) = max
end_if
Elektrotehnički fakultet, Algoritmi i Strukture Podataka 12
Beograd
Zadatak 3 - rešenje
POP(S) MAX(S)
if (top[S] = 0) then if (top[S] = 0) then
ERROR(Underflow) ERROR(Underflow)
else else
x = val(S[top[S]]) MIN(S) max = max(S[top[S]])
top[S] = top[S] -1 if (top[S] = 0) then return max
return x ERROR(Underflow) end_if
end_if else
min = min(S[top[S]])
return min
end_if

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 13


Beograd
Redovi
Zadatak 1
Na ulasku u železničku stanicu sa jednom prugom i jednim
slepim kolosekom desio se kvar, pa se na ulazu napravila
kolona međunarodnih i domaćih vozova. Kvar je otklonjen i
treba puštati vozove. Da bi međunarodni vozovi manje kasnili,
oni se puštaju prvi, po redosledu dolaska. Postoji samo jedna
pruga i vozovi se ne mogu „preticati“, tako da svi domaći vozovi
koji su bili ispred međunarodnih se prebacuju na slepi kolosek
koji je dovoljno veliki da svi vozovi mogu da stanu. Kada svi
međunarodni vozovi odu, puštaju se prvo vozovi sa slepog
koloseka, pa onda preostali domaći vozovi iz kolone. Domaćim
vozovima je dozvoljeno menjati poredak propuštanja. U samu
stanicu može da stane samo jedan voz.
Koje strukture podataka bi trebalo koristiti za modeliranje
vozova u koloni i na slepom koloseku, kako i zašto, u cilju
efikasnog rešavanja ovog problema?
15
Zadatak 1 - rešenje

• Međunarodni vozovi se preusmeravaju tako da se njihov


međusobni poredak ne sme promeniti.
– Implementacija korišćenjem strukture reda.
• Domaći vozovi se preusmeravaju na slepi kolosek. Njihov
redosled se sme promeniti.
- Kako slepi kolosek ima samo jedan izlaz, pogodna struktura za
njegovu realizaciju je stek.
• Jedan po jedan, na početku se puštaju vozovi iz reda, dok u
njemu ima međunarodnih vozova
• Potom se prazni struktura steka i na kraju ostatak reda
• Da bi se ovo realizovalo, potrebno je pratiti i broj
međunarodnih vozova u redu

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 16


Beograd
Zadatak 1 - primer
Na ulasku u stanicu se nalaze sledeći vozovi:
[stanica] <- M12, D07, D02, M03, D03

SLEPI
KOLOSEK

M12 D07 D02 M03 D03

STANICA

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 17


Beograd
Zadatak 1 - primer
- prvi međunarodni voz M12 prelazi u stanicu

SLEPI
KOLOSEK

M12 D07 D02 M03 D03

STANICA

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 18


Beograd
Zadatak 1 - primer
- međunarodni voz M12 izlazi iz stanice, a domaći voz D07 prelazi na
slepi kolosek, da bi međunarodni voz M03 mogao da prođe u stanicu
(međunarodni imaju prioritet)

SLEPI
KOLOSEK

D07

D02 M03 D03

STANICA

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 19


Beograd
Zadatak 1 - primer
- iz istog razloga i domaći voz D02 prelazi na slepi kolosek

SLEPI
KOLOSEK

D07 D02

M03 D03

STANICA

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 20


Beograd
Zadatak 1 - primer
- međunarodni voz M03 sada može da pređe u stanicu

SLEPI
KOLOSEK

D07 D02

M03 D03

STANICA

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 21


Beograd
Zadatak 1 - primer
- pošto nema više međunarodnih vozova, domaći vozovi mogu sa
slepog koloseka da prelaze u stanicu, dakle, D02 ide u stanicu

SLEPI
KOLOSEK

D07

D02 D03

STANICA

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 22


Beograd
Zadatak 1 - primer
- nakon njegovog odlaska i D07 sa slepog koloseka prelazi
u stanicu

SLEPI
KOLOSEK

D07 D03

STANICA

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 23


Beograd
Zadatak 1 - primer
- D07 odlazi sa stanice, pa domaći voz D03 iz kolone može
da pređe u stanicu

SLEPI
KOLOSEK

D03

STANICA

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 24


Beograd
Zadatak 1 - primer
- na kraju, voz D03 odlazi i stanica ostaje prazna

SLEPI
KOLOSEK

STANICA

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 25


Beograd
Zadatak 2
Razmatra se prioritetni red. Objasniti moguće načine
realizacije operacije brisanja (elementa najmanjeg
prioriteta), ako je red implementiran kao vektor.

• Postoji više načina realizacije prioritetnih redova


implementiranih kao vektor:
– markiranje izbačenog elementa
• umetanje novog elementa preko markiranog ili sažimanje niza
– pomeranje svih elemenata prilikom brisanja
– održavanje uređenosti elemenata
• Realizacije u pomoću vektora su uglavnom neefikasne!
Elektrotehnički fakultet, Algoritmi i Strukture Podataka 26
Beograd
Zadatak 2 - rešenje
Brisanje se najbrže obavlja ako se samo mesto uklonjenog elementa posebno
markira kao nevažeći element
9 4 2 5 1 6 3
Pri narednim pretraživanjima na najmanji element ignorišu se markirani
•Iako se markirani elementi ignorišu, prilikom brisanja im se mora
pristupiti (da bi se utvrdilo da su markirani)
•Lako može da se prepuni niz koji sadrži mnogo markiranih elemenata

Umetanje možemo realizovati na jedan od dva načina:


1)Umetanje bez umetanja preko markiranog elementa
•Elementi se dodaju na kraj niza
•Potrebno je da se prepakuje niz (izbace markirani elementi)

Dodavanje elementa vrednosti 8 Dodavanje elementa vrednosti 7


9 4 2 5 1 6 3 8 9 4 5 6 3 8 7
Elektrotehnički fakultet, Algoritmi i Strukture Podataka 27
Beograd
Zadatak 2 - rešenje
2) Umetanje preko markiranog elementa
• S obzirom da su markirane pozicije praktično slobodne, prethodni
način može da se modifikuje tako što se, umesto iza poslednjeg,
dozvoljava umetanje na poziciju prvog nevažećeg (markiranog)
elementa (ako takav postoji) – mora da se pretraži ceo niz
(neefikasno!)
• Može da se uvede pokazivač free koji pokazuje na prvu slobodnu
lokaciju
• Umetanje se onda vrši na mestu gde pokazuje free
9 4 2 5 1 6 3

free
Dodavanje elementa vrednosti 8 Dodavanje elementa vrednosti 7
9 4 8 5 1 6 3 9 4 8 6 7 6 3

Elektrotehnički fakultet, free Algoritmi i Strukture Podataka free 28


Beograd
Zadatak 2 - rešenje
Ako red nije sortiran, neefikasno je dohvatanje elementa – mora da se
prođe kroz ceo vektor i pronađe odgovarajući element
•Radi efikasnog dohvatanja – poželjno je držati red sortiran
•Neefikasno umetanje! – ako se ne umeće na kraj, moraju da se
pomeraju elementi
•U proseku se pomera ½ elemenata

Moguće rešenje: ostaviti slobodnog prostora pre početka reda


– Pomerati elementa pri početku reda ako ima manje elemenata od
mesta umetanja do početka reda
– Pomerati elemente pri kraju reda u suprotnom

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 29


Beograd
Zadatak 3
Posmatra se struktura podataka nad kojom je moguće izvršiti
sledeće operacije za pojedinačne podatke:
‒ dodavanja (add)
‒ uklanjanja (remove)

Struktura podataka je predviđena za rad sa celim brojevima.


Poznato je da struktura podataka može biti stek, red ili
prioritetan red kod kojeg element manje vrednosti ima
veći prioritet.
Predložiti jednostavnu i efikasnu proceduru koja jednoznačno
određuje o kojoj vrsti strukture podataka se radi.

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 30


Beograd
Zadatak 3 - rešenje
• Tražena procedura treba da omogući
jednoznačno određivanje vrste strukture podataka:
– stek vraća poslednji stavljen element
– red vraća prvi stavljen element
– prioritetni red vraća element najmanje vrednosti
• Prema tome:
– treba osmisliti postupak koji koristi raspoložive operacije
(dodavanje, uklanjanje) i nedvosmisleno nameće zaključak
o prirodi strukture podataka
– ima 3 različite strukture podataka → 3 različita moguća odgovora
• Dakle:
– umetnuti 3 elementa različitih vrednosti
– izvaditi jedan element
– na osnovu njegove vrednosti doneti zaključak
Elektrotehnički fakultet, Algoritmi i Strukture Podataka 31
Beograd
Zadatak 3 - rešenje
• Pitanje: kojim redom umetati vrednosti?
– stek vraća poslednju umetnutu
– red vraća prvu umetnutu
– prioritetni red vraća najmanju
– → najmanja ne sme biti ni prva ni poslednja
– → redosled ostalih nije bitan

PROCEDURE IDENTIFY(data_structure)
data_structure.add(2)
data_structure.add(1)
data_structure.add(3)
x = data_structure.remove()
if x = 1 then return pri_queue
else if x = 2 then return queue
else return stack
32
end_procedure
Zadatak 4 - za samostalnu vežbu
• U odeljenju za prijem i obradu pošiljki, u preduzeću
specijalizovanom za gradski transport pošiljki, rade tri zaposlena:
jedan prima pošiljke koje donose kuriri, drugi razvrstava pošiljke
prema ugovorenom vremenu isporuke (hitno, u toku dana,
u roku od 3 dana), a treći pakuje pošiljke u transportna vozila.
Pošiljke se u transportna vozila pakuju prema redosledu prispeća u
odeljenje, tako da prednost imaju pošiljke koje treba isporučiti pre
ostalih. Kapacitet transportnih vozila je 40 pošiljki
(smatrati da su sve pošiljke iste težine i zapremine).
1. Predložiti strukturu podataka koja omogućava efikasnu selekciju pošiljki
za slanje na prethodno opisan način. Skicirati procedure
za umetanje u predloženu strukturu i dohvatanje elemenata iz nje.
2. Skicirati procedure PRIJEM koja realizuje prijem i razvrstavanje pošiljke
i SLANJE koja realizuje selekciju i pakovanje pošiljke
u transportno vozilo.

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 33


Beograd
Zadatak 5 - za samostalnu vežbu
Sa redom implementiranim kao ulančana lista na koju
pokazuje pokazivač q, realizovati operaciju umetanja
elementa sa vrednošću x i operaciju brisanja iz
nepraznog reda.

• Kod neprioritetnih redova, umetanje se vrši:


– nov element se dodaje na kraj reda
– element se uzima sa početka reda
• Tzv. FIFO (first in – first out) ili
FCFS (first come – first served) disciplina

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 34


Beograd
Zadatak 5 - rešenje
INSERT-L(q, x) DELETE-L(q)
p = GETNODE if (q = nil) then
info(p) = x return underflow
next(p) = nil else
if (rear[q] = nil) then p=q
q=p x = info(p)
else q = next(p)
next(rear[q]) = p if (q = nil) then
end_if rear[q] = nil
rear[q] = p end_if

FREENODE(p)
return x
end_if

INSERT-L je zapravo dodavanje elementa na kraj liste,


a DELETE-L je brisanje elementa sa početka liste.
Elektrotehnički fakultet, Algoritmi i Strukture Podataka 35
Beograd
Zadatak 6 - za samostalnu vežbu
Realizovati operaciju umetanja elementa u prioritetni red
implementiran kao uređena jednostruko ulančana lista.
Mogu se koristiti već realizovane funkcije:
ADD_L(S, x) – ubacivanje novog elementa na početak liste
INSERT_AFTER(q, x) – umetanje u listu novog čvora
sa sadržajem x iza čvora čija je adresa q.

• Prioritetni red – novi element ne sme da se umetne bilo gde


• Realizacija prioritetnog reda pomoću ulančane liste
je efikasnija u odnosu na vektor
Elektrotehnički fakultet, Algoritmi i Strukture Podataka 36
Beograd
Zadatak 6 - rešenje
PQ-INSERT(pri_q, x)
q = nil
p = pri_q
while (p ≠ nil) and (x ≥ info(p)) do
q=p
p = next(p)
end_while
if (q = nil) then
ADD-L(pri_q, x)
else
INSERT-AFTER(q, x)
end_if

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 37


Beograd
Zadatak 7
Realizovati red koristeći dva steka implementirana
u jednom vektoru.
front rear

9 3 4 2 6 5 1

bottom top stek za umetanje (S1)

top bottom stek za dohvatanje (S2)

• Ideja:
– jedan stek služi za umetanje novog elementa
– drugi stek služi za dohvatanje elementa

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 38


Beograd
Zadatak 7 - rešenje

DELETE(x)
INIT(S1,S2)
if (top1 == top2) then
ALLOCATE(V[1:n])
return underflow
b2 = b1 = top1 = top2 = 0
end_if
rear = front = 0
x = POP(S2)
return
b1 = top2
front = top2
INSERT(x) return x
PUSH(S1, x)
b2 = top1
rear = top1
return

Za vežbu: Realizovati stek koristeći dva reda implementirana u jednom vektoru.

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 39


Beograd

You might also like