STRUKTURE
PODATAKA
I
ALGORITMI
Vezane
liste
-
Jednostruka
linearna
Strukture
podataka
i
algoritmi
2011/2012
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
VEZANA
LISTA
Apstraktna
struktura
podataka
iji
su
elemen>
meusobno
povezani
jednom
ili
dvjema
vezama.
- elemente
zovemo
vorovima
- prema
broju
veza
meu
vorovima
liste
zovemo
jednostrukima
ili
dvostrukima
- u
vezanoj
lis>
svaki
vor
poznaje
samo
svog
prvog
susjeda
Listu
je
najlake
vizualizira>
kao
vlak
s
lokomo>vom
i
vagonima
- cijeli
vlak
predstavlja
listu
- vagoni
predstavljaju
vorove
- lokomo>va
predstavlja
pokaziva
na
listu
Strukture
podataka
i
algoritmi
2 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
VEZANA
LISTA
Pokaziva
na
listu
(lokomo>va)
je
od
iznimne
vanos>
za
listu
- pokazuje
na
prvi
vor
koji
pokazuje
na
drugi
vor
koji
pokazuje
na
trei
vor...
- pristup
svim
vorovima
u
lis>
nije
mogu
bez
ovog
pokazivaa
- zove
se
head (glava)
- mora
bi>
inicijaliziran
ili
pokazuje
na
prvi
vor
u
lis5
ili
pokazuje
ni
na
to
->
null
Za
listu
iji
head
pokazuje
na
null
kaemo
da
je
prazna
Strukture
podataka
i
algoritmi
3 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
VEZANA
LISTA
vorovi
u
vezanoj
lis>
sastoje
se
od
- barem
jednog
podatkovnog
polja
koje
ga
poblie
opisuje
- barem
jednog
pokazivakog
polja
koje
ga
povezuje
s
drugim
vorovima
ukoliko
je
lista
jednostruko
vezana,
to
pokazivako
polje
se
obino
zove
next
(slijedei)
ukoliko
je
lista
dvostruko
vezana,
osim
polja
next,
postoji
i
dodatno
pokazivako
polje
a
koje
se
obino
zove
past
(prethodni)
class Student
{
public int mb;
public string ime;
public int dob;
public Student next;
//public Student past;
}
Strukture
podataka
i
algoritmi
public Student(string i, int d, int m)
{
ime = i;
dob = d;
mb = m;
next = null;
}
4 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
VEZANA
LISTA
Iako
ne
toliko
vaan
kao
head,
i
posljednji
vor
u
lis>
je
takoer
bitan
- ima
i
vlas>to
ime:
tail
(rep)
Ovisno
o
deniciji
posljednjeg
vora
u
lis>
mogua
je
i
dodatna
podjela
vezanih
lista
na
- posljednji
je
onaj
koji
ne
pokazuje
ni
na
jednog
drugog
->
linearna
vezana
lista
- posljednji
je
onaj
koji
pokazuje
na
prvog
u
lis>
->
cirkularna
vezana
lista
Strukture
podataka
i
algoritmi
5 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
VEZANA
LISTA
Obzirom
na
broj
veza
meu
vorovima,
te
na
deniciju
posljednjeg
vora,
razlikujemo
e>ri
vrste
vezanih
lista
- jednostruko
vezana
linearna
- jednostruko
vezana
cirkularna
- dvostruko
vezana
linearna
- dvostruko
vezana
cirkularna
Strukture
podataka
i
algoritmi
6 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
VEZANA
LISTA
emu
uope
liste
kad
bi
i
nizovi
bili
dovoljni?
Neke
operacije
nad
nizovima
su
sloene
- umetanje
novog
elementa
izmeu
dva
postojea
- dodavanje
novog
elementa
nakon
to
je
kvota
popunjena
- brisanje
postojeeg
elementa
U
vezanoj
lis>
sve
te
operacije
su
znatno
jednostavnije
Meu>m,
neke
operacije
nad
listama
su
opet
sloenije
- pristup
i-tom
elementu
- sor>ranje
svih
elemenata
to
odabra>?
- ovisi
o
primjeni!
Strukture
podataka
i
algoritmi
7 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
VEZANA
LISTA
Temeljne
operacije
nad
listama
su
- unos
u
listu
- ispis
iz
liste
(svih
ili
nekih
elemenata)
- pretraivanje
unutar
liste
- brisanje
iz
liste
(jednog
ili
vie
elemenata)
Svaka
od
ovih
operacija
moe
se
i
hoe
razmatra>
nad
svim
vrstama
vezanih
lista
Strukture
podataka
i
algoritmi
8 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
UNOS
U
VEZANU
LISTU
Prije
samog
unosa
potrebno
je
prvo
stvori>
novi
vor
a
to
podrazumijeva
- odredi>
podatkovna
i
pokazivaka
polja
- pridijeli>
memorijski
prostor
tom
novom
voru
Najzgodnije
je
to
napravi>
putem
konstruktora
- prvo
dobi>
sve
podatke
od
korisnika
(ili
od
pozivne
metode)
- potom
kljunom
rijeju
new
stvori>
i
inicijalizira>
novi
vor
Student novi = new Student(i,d,m);
Strukture
podataka
i
algoritmi
9 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
UNOS
U
VEZANU
LISTU
Stvaranje
novog
studenta
obavljat
e
metoda
NoviStudent()-
na
vjebama
- kao
ulazni
parametar
prima
varijablu
mb
(ma>ni
broj)
i
vano
je
da
ju
primi
kao
referencu
- kao
rezultat
vraa
tog
novostvorenog
studenta
ma5ni
broj
bi
trebao
bi5
jedinstven
o
emu
vodi
rauna
pozivna
metoda
static Student NoviStudent(ref int mb)
{
dohvati ime studenta
dohvati dob studenta
!
!
stvori i inicijaliziraj novog studenta
!
poveaj matini broj
vrati novog studenta
}
Strukture
podataka
i
algoritmi
10 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
UNOS
U
VEZANU
LISTU
Jednom
kad
je
novi
student
stvoren,
unos
je
mogu
- na
poetku
liste
- na
kraju
liste
- unutar
liste
nakon
nekog
odreenog
vora
Smisleno
je
napravi>
opu
metodu
za
unos
koja
bi
onda
u
sebi
sadravala
opcije
koje
bi
korisnik
odabrao
pri
svakom
pojedinom
unosu
Izrada
ove
sasvim
jednostavne
metode
(switch)
ostavljena
je
za
samostalnu
vjebu
Iako
su
algoritmi
za
unos
za
svaku
od
e>ri
vrste
vezanih
lista
jednaki
do
na
specinost
pojedine
liste,
radi
jednostavnos>
emo
u
poetku
razmatra>
iskljuivo
jednostruko
vezanu
linearnu
(JVL)
listu
Strukture
podataka
i
algoritmi
11 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
UNOS
NA
POETAK
JVL
LISTE
Algoritam
za
unos
u
listu:
(1) usmjeri>
novi
vor
da
pokazuje
na
prvi
vor
u
lis>
(2) usmjeri>
pokaziva
na
listu
da
pokazuje
na
novi
vor
Jesu
li
ovi
brojevi
tu
sluajno?
to
bi
se
dogodilo
ako
bi
se
poredak
obrnuo?
Strukture
podataka
i
algoritmi
12 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
UNOS
NA
POETAK
JVL
LISTE
ako
se
redoslijed
operacija
obrne,
katastrofalne
posljedice
slijede
koje?
Strukture
podataka
i
algoritmi
13 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
UNOS
NA
POETAK
JVL
LISTE
Unos
u
praznu
listu
!"#$
!"#$
Unos
u
nepraznu
listu
!"#$
!"#$
!"#$
!"#$
B
Strukture
podataka
i
algoritmi
14 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
UNOS
NA
POETAK
JVL
LISTE
Unos
e
obavlja>
metoda
UnosPocetak()
-
na
vjebama
- kao
parametre
prima
pokazivae
na
listu
(head)
te
na
novog
studenta
(novi)
- kao
rezultat
ne
vraa
nita
Analogna
je
metodi
Push()
koju
smo
razmatrali
kod
stoga.
Strukture
podataka
i
algoritmi
15 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
UNOS
NA
KRAJ
JVL
LISTE
Algoritam
za
unos
u
listu:
- odredi>
posljednji
vor
u
lis>
- usmjeri>
posljednjeg
da
pokazuje
na
novog
Strukture
podataka
i
algoritmi
16 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
UNOS
NA
KRAJ
JVL
LISTE
Unos
u
praznu
listu
!"#$
!"#$
Hm...
Strukture
podataka
i
algoritmi
17 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
UNOS
NA
KRAJ
JEDNOSTRUKO
VEZANE
LINEARNE
LISTE
!"#$
%&"'
A
!"#$
A
NOVI
NOVI
NOVI
NOVI
!"#$
A
!"#$
A
NOVI
NOVI
Strukture
podataka
i
algoritmi
18 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
UNOS
NA
KRAJ
JEDNOSTRUKO
VEZANE
LINEARNE
LISTE
Unos
e
obavlja>
metoda
UnosKraj()
-
na
vjebama
- kao
parametre
prima
pokazivae
na
listu
(head)
te
na
novog
studenta
(novi)
- kao
rezultat
ne
vraa
nita
!
!
!
!
static void UnosKraj(ref Student head, ref Student novi)
{
ako je lista prazna
! !
head pokazuje na novog
ako lista nije prazna
! !
odredi posljednjeg
! !
usmjeri ga na novog
Kako
odredi>
posljednji
vor?
}
Strukture
podataka
i
algoritmi
19 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
UNOS
UNUTAR
JVL
LISTE
Algoritam
za
unos
u
listu:
- dobi>
redni
broj
vora
nakon
kojeg
se
unosi
npr.
n
- smjes>>
novi
vor
u
listu
izmeu
n-tog
i
(n+1)-og
Naziru
li
se
potencijalni
problemi
s
ovim
algoritmom?
Strukture
podataka
i
algoritmi
20 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
UNOS
UNUTAR
JVL
LISTE
Algoritam
za
unos
u
listu:
- dobi>
valjani
redni
broj
vora
nakon
kojeg
se
unosi
npr.
n
- smjes>>
novi
vor
u
listu
nakon
n-tog
vora
if (n == 0)
???
Strukture
podataka
i
algoritmi
21 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
UNOS
UNUTAR
JVL
LISTE
Razlikujemo
dvije
vrste
unosa
unutar
liste
- ispred
odreenog
vora
- nakon
odreenog
vora
Uz
malo
lukavstva,
svode
se
na
jedan
- ispred
n-tog
=>
nakon
(n-1)-og
- nakon
n-tog
=>
ispred
(n+1)-og
Unos
nakon
podrazumijeva
provjeru
rednog
broja
kojeg
korisnik
unosi
unos
mogu
najranije
od
nultog
unos
mogu
najdalje
do
nakon
zadnjeg
Strukture
podataka
i
algoritmi
22 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
UNOS
UNUTAR
JVL
LISTE
Algoritam
za
unos
u
listu:
- pronai
traeni
vor
nakon
kojeg
unosimo
- ako
je
unos
prije
prvog
unos
na
poetak
- inae
novog
postavi5
da
pokazuje
na
sljedbenika
traenog
postavi5
da
pokazuje
na
novog
Strukture
podataka
i
algoritmi
23 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
UNOS
UNUTAR
JVL
LISTE
Pronalazak
n-tog
vora
radi
metoda
Nakon()
-
varijanta,
ne
mora
ovako
- kao
parametre
metoda
prima
pokaziva
na
listu
(head)
cijeli
broj
nakon
kojeg
se
novi
vor
unosi
(n)
- kao
rezultat
metoda
vraa
pokaziva
na
pronaeni
vor
NULL
ako
nema
dovoljno
vorova
u
lis5
da
zadovolji
redni
broj
Pozivna
metoda
duna
je
- osigura>
da
se
ne
proslijedi
nega>van
broj
- ukoliko
je
n
jednak
0
pozva>
funkciju UnosPocetak()
Strukture
podataka
i
algoritmi
24 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
UNOS
UNUTAR
JVL
LISTE
Unos
e
obavlja>
metoda
UnosNakon()
-
na
vjebama
- kao
parametre
prima
pokaziva
na
listu
(head)
pokaziva
na
novog
studenta
(novi)
- kao
rezultat
vraa
nita,
ako
se
koris5
pomona
metoda
Nakon()
bool
vrijednost
ako
se
ne
koris5
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
static bool UnosNakon(ref Student head, ref Student novi, int n)
{
ako je n = 0
!
unesi na poetak
!
vrati istinu
ako je n > 0
!
etaj kroz listu dok ne nae n.ti vor
!
ako ga nae
!
umetni novog izmeu njega i n+1.og
!
vrati istinu
!
ako ga ne nae
!
vrati la
}
Strukture
podataka
i
algoritmi
25 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
ISPIS
Unos
bez
ispisa
je
kao
juha
bez
soli
Ispis
podrazumijeva
- ispis
jednog
vora
- ispis
svih
vorova
u
lis>
- ispis
liste
po
pola
Strukture
podataka
i
algoritmi
26 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
ISPIS
JEDNOG
Ispis
tono
jednog
vora
e
obavlja>
metoda
IspisJednog()
-
na
vjebama
- kao
ulazne
parametre
prima
vor
koji
se
ima
ispisa5
redni
broj
vora
koji
se
ispisuje
- kao
izlaz
ne
vraa
nita
Parametar
redni_broj_vora
ima
dvostruku
ulogu
- ako
je
0
tada
naznaujemo
kako
nas
zanima
samo
ispis
tog
vora,
ne
i
njegov
redni
broj
- ako
je
>
0
tada
nam
je
bitno
dodatno
jo
ispisa>
i
redni
broj
- nekada
e
jedna
primjena
bi>
korisnija
od
druge,
zgodno
je
ima>
obje
Strukture
podataka
i
algoritmi
27 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
ISPIS
CIJELE
LISTE
Temeljna
ideja
- ukoliko
je
lista
prazna,
ispisa>
poruku
o
tome
- ukoliko
je
lista
neprazna
ispisa>
podatke
prvog
vora
- prei
na
idui
vor
i
ponovlja>
postupak
sve
dok
ne
doemo
do
kraja
Strukture
podataka
i
algoritmi
28 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
ISPIS
LISTE
PO
POLA
Dva
su
temeljna
pristupa
- raunajui
broj
vorova
u
lis>
- koristei
brzi/spori
pokaziva
Strukture
podataka
i
algoritmi
29 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
ISPIS
LISTE
PO
POLA
-
DULJINA
Temeljna
ideja
- odredi>
ukupan
broj
vorova
u
lis>
-
n
- ispisa>
vorove
od
prvog
do
n/2-tog
od
n/2-tog
do
posljednjeg
- u
sluaju
neparnog
broja
jedna
polovica
je
oito
dulja
Strukture
podataka
i
algoritmi
30 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
ISPIS
LISTE
PO
POLA
-
BRZI/SPORI
Temeljna
ideja
- uves>
dva
pokazivaa
(brzi
i
spori)
i
oba
usmjeri>
na
prvi
vor
spori
pokaziva
pomica5
za
po
jedan
vor
prema
kraju
liste
brzi
pokaziva
pomica5
za
po
dva
vora
prema
kraju
liste
- pomica>
oba
pokazivaa
sve
dok
brzi
ne
doe
do
NULL
- kada
brzi
doe
do
NULL,
spori
je
tono
na
pola
liste
- ispisa>
vorove
od
prvog
do
sporog
od
sporog
do
kraja
- u
sluaju
neparnog
broja
jedna
polovica
je
oito
dulja
Strukture
podataka
i
algoritmi
31 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
PRETRAIVANJE
Temeljna
ideja
- utvrdi>
kriterij
za
pretragu
- pronai
traeni
vor
- vra>>
pokaziva
na
nj
Rezultat
pretrage
je
- NULL
- traeni
vor
Ovisno
o
jedinstvenos>
kriterija,
moguce
je
dobi>
vise
rezultata
pretrage,
to
valja
uze>
u
obzir
pri
njihovom
ispisu
Strukture
podataka
i
algoritmi
32 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
PRETRAIVANJE
Ako
je
kriterij
za
pretraivanje
ma>ni
broj,
tada
su
stvari
jednostavne.
- uita>
mb
s
>pkovnice
- proeta>
kroz
listu
i
utvrdi>
postoji
li
takav
mb
ako
postoji
ispisa5
vor
s
5m
mb-om
ako
ne
ispisa5
poruku
da
takvog
nema
Ako
je
kriterij
za
pretraivanje
ime
ili
dob,
tada
su
stvari
bitno
sloenije
- kojeg
studenta
ispisa>?
prvog
u
lis5
s
5m
imenom
sve
u
lis5
s
5m
imenom
- to
vra>>
kao
rezultat
pretraivanja?
Strukture
podataka
i
algoritmi
33 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
BRISANJE
Pod
brisanjem
vora
iz
liste
podrazumijevamo
- uklanjanje
vora
iz
liste
- oslobaanje
memorije
koju
je
taj
vor
zauzimao
za
nas
radi
kovacin
po
prestanku
izvoenja
programa.
Brisa>
je
mogue
- prvi
vor
u
lis>
- posljednji
vor
u
lis>
- vor
unutar
liste
prema
kriteriju
- sve
vorove
unutar
liste
prema
istom
kriteriju
Strukture
podataka
i
algoritmi
34 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
BRISANJE
PRVOG
VORA
U
LISTI
!"#$
A
!"#$
A
!"#$
B
Strukture
podataka
i
algoritmi
35 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
BRISANJE
POSLJEDNJEG
VORA
U
LISTI
Temeljna
ideja
- pronai
pretposljednji
vor
u
lis>
- postavi>
ga
da
pokazuje
na
novog
Strukture
podataka
i
algoritmi
36 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
BRISANJE
POSLJEDNJEG
VORA
U
LISTI
!"#$
A
!"#$
A
%"&'(')(*#+'
!"#$
A
Strukture
podataka
i
algoritmi
37 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
BRISANJE
UNUTARNJEG
VORA
PREMA
KRITERIJU
Temeljna
ideja
- pronai
prethodnika
traenog
vora
- postavi>
prethodnika
da
pokazuje
na
sljedbenika
traenog
vora
Strukture
podataka
i
algoritmi
38 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
BRISANJE
UNUTARNJEG
VORA
PREMA
KRITERIJU
!"#$
A
!"#$
A
!"#$
A
'("%!)$*+, %#&
'("%!)$*+, %#&
-.&"$/"*+,
-.&"$/"*+,
!"#$
A
Strukture
podataka
i
algoritmi
39 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST
BRISANJE
SVIH
VOROVA
PREMA
KRITERIJU
Ovisno
o
postojanju
kriterija
sve
dok
je
lista
neprazna
- ako
briemo
bez
kriterija
ponavlja5
postupak
brisanja
prvog
vora
u
lis5
- ako
je
kriterij
bitan
ponavlja5
postupak
brisanja
vora
prema
kriteriju
mogue
je
spremi5
i
mb-ove
upitnih
vorova
u
pomoni
niz
koji
se
proslijedi
metodi
za
brisanje
Strukture
podataka
i
algoritmi
40 /
40
Ivan
Bilobrk
-
Odjel
za
Informa5ku
-
PMFST