Transcript File

Glava 12
Kolekcije
Kolekcije
• Kolekcija je objekat koji nam pomaze da
organizujemo i upravljamo druge objekte
• Glava 12 razmatra:







Concept kolekcije
Razdvajanje interfejsa od implementacije
Dinamicke strukture podataka
Povezane liste
Redove i stekove
Drveta i grafove
Genericke strukture
© 2004 Pearson Addison-Wesley. All rights reserved
12-2
Pregled
Kolekcije i strukture podataka
Dinamicka predstavljanja
Redovi i stekovi
Drveta i grafovi
Java kolekcije API
© 2004 Pearson Addison-Wesley. All rights reserved
12-3
Kolekcije
• Kolekcija je objekat koji sluzi za smjestanje drugih
objekata
• Kolekcija obicno daje servise kao sto su
dodavanje, brisanje i druga upravljanja
elementima koje ona sadrzi
• Ponekad su elementi kolekcije uredjeni, ponekad
nisu
• Ponekad su kolekcije homogene, sadrze samo
objekte istog tipa, a ponekad su heterogene
© 2004 Pearson Addison-Wesley. All rights reserved
12-4
Abstrakcija
• Kolekcije mogu biti implementirane na razlicite
nacine
• Nase strukture podataka trebaju biti abstrakcije
• Tj., one trebaju sakriti nepotrebne detalje
• Mi zelimo razdvojiti interfejs strukture od njegove
implementacije
• Ovo pomaze da kontrolisemo kompleksnost i cini
mogucim izmjenu implementacije bez izmjene
interfejsa
© 2004 Pearson Addison-Wesley. All rights reserved
12-5
Abstraktni tipovi podataka
• Abstraktni tip podataka (ADT) je organizovana
kolekcija informacija i skupa operacija koji se
koristi za upravljanje tim informacijama
• Skup operacija definise interfejs na ADT
• U nekom smislu, tako dugo koliko ADT ispunjava
potrebe interfejsa, nije vazno kako je ADT
implementirana
• Objekti su perfekatan programerski mehanizam za
kreiranje ADT jer njihovi unutrasnji detalji su
inkapsulirani
© 2004 Pearson Addison-Wesley. All rights reserved
12-6
Pregled
Kolekcije i strukture podataka
Dinamicka predstavljanja
Redovi i stekovi
Drveta i grafovi
Java kolekcije API
© 2004 Pearson Addison-Wesley. All rights reserved
12-7
Dinamicke strukture
• Staticka struktura podataka ima fiksnu velicinu
• Ovo znacenje je razlicito od znacenja za
modifikator static
• Nizovi su staticki; kada jednom definisemo broj
elemenata koje niz moze sadrzati, velicina se ne
mijenja
• Dinamicka struktura podataka raste i suzava se u
toku vremena izvodjenja programa prema
zahtjevima njenog sadrzaja
• Dinamicka struktura podataka se implementira
koriscenjem linkova
© 2004 Pearson Addison-Wesley. All rights reserved
12-8
Reference objekata
• Podsjetimo se da je referenca objekta neka
varijabla koja sadrzi adresu toga objekta
• Referenca se takodje moze zvati pointer
(pokazivac)
• Reference cestoprikazujemo graficki:
student
John Smith
40725
3.58
© 2004 Pearson Addison-Wesley. All rights reserved
12-9
Reference kao linkovi
• Reference na objekte mogu biti koristene za
kreiranje linkova izmedju objekata
• Pretpostavimo da klasa Student sadrzi neku
referencu na drugi objekat tipa student
John Smith
40725
3.57
© 2004 Pearson Addison-Wesley. All rights reserved
Jane Jones
58821
3.72
12-10
Reference kao linkovi
• Reference mogu biti koristene za kreiranje raznih
povezanih struktura, kao sto je povezana lista:
studentList
© 2004 Pearson Addison-Wesley. All rights reserved
12-11
Posredni cvorovi
• Cuvani objekti nebi trebali voditi racun o detaljima
strukture podataka u kojoj se oni cuvaju
• Na primjer, klasa Student ne mora cuvati link na
slijedeci objekat tipa Student u listi
• Umjesto toga mozemo koristiti posebnu klasu sa
dva dijela: 1) referencom na nezavisan objekat i
2) linkom na slijedeci cvor u listi
• Unutrasnja reprezentacija postaje povezana lista
cvorova
© 2004 Pearson Addison-Wesley. All rights reserved
12-12
Kolekcija Magazine
• Izlozimo primjer kolekcije objekata Magazine,
kojom se upravlja preko klase MagazineList, koja
ima privatnu unutrasnju klasu zvanu
MagazineNode
• Posto je MagazineNode privatna za
MagazineList, to metode iz MagazineList mogu
direktno pristupiti podacima iz MagazineNode bez
narusavanja inkapsulacije
• Vidi MagazineRack.java (strana 615)
• Vidi MagazineList.java (strana 616)
• Vidi Magazine.java (strana 618)
© 2004 Pearson Addison-Wesley. All rights reserved
12-13
Druge dinamicke reprezentacije
• Moze biti zgodno implementirati povezanu listu
kao dvostruko povezanu listu (doubly linked list),
sa referencama next i previous
list
© 2004 Pearson Addison-Wesley. All rights reserved
12-14
Druge dinamicke reprezentacije
• Moze biti zgodno koristiti poseban cvor naslova
(header node), sa brojacem i referencama i na
glavu i na kraj liste
list
© 2004 Pearson Addison-Wesley. All rights reserved
count: 4
front
rear
12-15
Pregled
Kolekcije i strukture podataka
Dinamicke reprezentacije
Redovi i stekovi
Drveta i grafovi
Java kolekcija API
© 2004 Pearson Addison-Wesley. All rights reserved
12-16
Klasicne strukture podataka
• Sada izlazemo neke klasicne strukturer podataka
• Klasicne linearne strukture podataka ukljucuju
redove i stekove (queues i stacks)
• Klasicne nelinearne strukture podataka ukljucuju
drveta i grafove
© 2004 Pearson Addison-Wesley. All rights reserved
12-17
Redovi (Queues)
• Red (queue) je slican listi ali dodaje clanove samo
na kraj liste, a uklanja ih samo sa pocetka liste
• Naziva se FIFO struktura podataka: First-In, FirstOut
• Analogija: red klijenata na salteru banke
enqueue
© 2004 Pearson Addison-Wesley. All rights reserved
dequeue
12-18
Redovi
• Mozemo definisati operacije za neki red
 enqueue – dodaje clan na kraj reda
 dequeue (ili serve) – udaljuje clan sa pocetka reda
 empty – vraca true ako je red prazan
• Kao u nasem primjeru sa linkovanim listama,
preko cuvanja genericke reference Object, svaki
objekat moze biti sacuvan u redu
• Redovi su cesto korisni u simulacijama ili u svakoj
situaciji u kojoj je clan “backed up” dok ceka
obradu
© 2004 Pearson Addison-Wesley. All rights reserved
12-19
Redovi
• Red moze biti predstavljen pomocu jednostruko
povezane liste; on je najefikasniji ako reference
pokazuju od pocetka ka kraju reda
• Red moze biti predstavljen pomocu niza, koristeci
operator ostatka (%) za “wrap around” kada je
dostignut kraj niza a prostor na pocetku niza je
slobodan
© 2004 Pearson Addison-Wesley. All rights reserved
12-20
Stekovi (Stacks)
• ADT (Abstraktni Tip Podataka) je takodje linearna,
slicno kao i lista ili red
• Clanovi se dodaju i uklanjaju samo sa jedne strane
steka
• On je dakle LIFO: Last-In, First-Out
• Analogija: stek tanjira u kuhinji, stek racuna koje
treba platiti, ili stek bala slame u stali
© 2004 Pearson Addison-Wesley. All rights reserved
12-21
Stekovi
• Stekove cesto crtamo vertikalno:
push
© 2004 Pearson Addison-Wesley. All rights reserved
pop
12-22
Stekovi
• Neke operacije na stekovima:




push – dodaj clan na vrh steka
pop – odstrani clan sa vrha steka
peek (ili top) – preuzima clan sa vrha a da ga ne udaljuje
empty – vraca tacno ako je stek prazan
• Stek se moze predstaviti jednostruko povezanom
listom; nije vazno da li reference pokazuju od vrha
ka dnu ili vice versa
• Stek moze biti prikazan pomocu niza, ali novi clan
trebalo bi postaviti u slijedece slobodno mjesto
niza, a ne na kraj
© 2004 Pearson Addison-Wesley. All rights reserved
12-23
Stekovi
• Paket java.util sadrzi klasu Stack
• Slicno operacijama ArrayList, operacije Stack
operisu na referencama Object
• Vidi Decode.java (strana 623)
© 2004 Pearson Addison-Wesley. All rights reserved
12-24
Pregled
Kolekcije i strukture podataka
Dinamicke reprezentacije
Redovi i stekovi
Drveta i grafovi
Java kolekcija API
© 2004 Pearson Addison-Wesley. All rights reserved
12-25
Drveta
• Drvo (Tree) je nelinearna struktura podataka koja
se sastoji od cvora korijena (root) i potencijalno
vise listova dodatnih cvorova koji formiraju
hijerarhiju
• Cvorovi koji nemaju djece nazivaju se listovi (leaf)
• Cvorovi osim korijena i listova nazivaju se
unutrasnji (internal) cvorovi
• U opstem drvetu, svaki cvor ima vise cvorovadjece
© 2004 Pearson Addison-Wesley. All rights reserved
12-26
Binarna drveta
• U binarnom drvetu, svaki cvor moze imati najvise
dva cvora-djeteta
• Binarno drvo moze biti definisano rekurzivno. Ono
je ili prazno (osnovni slucaj) ili se sastoji od
korijena i dva poddrveta, od kojih je svako binarno
drvo
• Drveta se tipicno predstavljaju koristeci reference
kao dinamicke linkove, iako je moguce koristiti
fiksnu reprezentaciju slicno nizovima
• Za binarna drveta, ovo zahtijeva cuvanje samo dva
linka po cvoru, na lijevo i na desno dijete
© 2004 Pearson Addison-Wesley. All rights reserved
12-27
Grafovi
• Graph je ne-linearna struktura
• Za razliku od drveta, graf nema korijena
• Svaki cvor u grafu moze biti povezan sa svakim
drugim cvorom pomocu grane grafa
• Analogija: Sistem puteva koji povezuju gradove na
mapi
© 2004 Pearson Addison-Wesley. All rights reserved
12-28
Digrafovi
• U nekom orijentisanom grafu ili digrafu, svaka
grana ima specificnu orijentaciju
• Grane sa orijentacijom se ponekad nazivaju lukovi
• Analogija: avionski letovi izmedju aerodroma
© 2004 Pearson Addison-Wesley. All rights reserved
12-29
Predstavljanje grafova
• I neorijentisani grafovi i orijentisani grafovi mogu
se predstaviti koristeci dinamicke linkove ili
koristeci nizove.
• Kao i uvijek, vrsta perdstavljanja treba pomoci da
se ubrzaju planirane operacie i da ih ucini
pogodnim za implementiranje
© 2004 Pearson Addison-Wesley. All rights reserved
12-30
Pregled
Kolekcije i strukture podataka
Dinamicke reprezentacije
Redovi i stekovi
Drveta i grafovi
Java kolekcija API
© 2004 Pearson Addison-Wesley. All rights reserved
12-31
Collection Classes
• The Java standard library contains several classes
that represent collections, often referred to as the
Java Collections API
• Their underlying implementation is implied in the
class names such as ArrayList and LinkedList
• Several interfaces are used to define operations
on the collections, such as List, Set, SortedSet,
Map, and SortedMap
© 2004 Pearson Addison-Wesley. All rights reserved
12-32
Genericki tipovi
• Kao sto je receno u Glavi 7, Java podrzava genericke tipove,
koji su korisni pri definisanju kolekcija
• Klasa moze biti definisana da operise na nekom generickom
tipu koji se specificira prilikom instaciranja klase:
LinkedList<Book> myList =
new LinkedList<Book>();
• Specificirajuci tip sacuvan u kolekciji, samo mu objekti toga
tipa mogu biti dodati
• Stavise, kada je jedan objekat izbrisan, njegov tip je vec
postavljen
© 2004 Pearson Addison-Wesley. All rights reserved
12-33
Sazetak
• Glava 12 razmatra:







koncept kolekcije
razdvajanje interfejsa od implementacije
dinamicke strukture podataka
linkovane liste
redove i stekove
drveta i grafove
genericke tipove
© 2004 Pearson Addison-Wesley. All rights reserved
12-34