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