1 / 74

V. Adatszerkezetek, kollekciók

V. Adatszerkezetek, kollekciók. 20. Klasszikus adatszerkezetek 21. Kollekció keretrendszer. V. Adatszerkezetek, kollekciók. 20. Klasszikus adatszerkezetek 1. Az adatszerkezetek rendszerezése 2. Absztrakt tárolók 3. Tömb 4. Tábla 5. Verem 6. Sor 7. Fa 8. Irányított gráf, hálózat.

nusa
Download Presentation

V. Adatszerkezetek, kollekciók

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. V. Adatszerkezetek, kollekciók 20. Klasszikus adatszerkezetek 21. Kollekció keretrendszer

  2. V. Adatszerkezetek, kollekciók 20. Klasszikus adatszerkezetek 1. Az adatszerkezetek rendszerezése 2. Absztrakt tárolók 3. Tömb 4. Tábla 5. Verem 6. Sor 7. Fa 8. Irányított gráf, hálózat

  3. Adatszerkezetek • Adatmodell, eljárásmodell • Adatszerkezet: egymással kapcsolatban álló adatok, objektumok összessége • Elemei: csomóponti adatok, kapcsolatok • Reprezentáció: gráffal • csomóponti adatok: gráf csúcsai • kapcsolatok: gráf élei • Műveletek • Konstrukciós műveletek • Szelekciós műveletek

  4. Boldog Boglárka Fekete Farkas Madár Aladár Madár Aladár Boldog Boglárka Fekete Farkas Példa: Hallgató objektumok összekapcsolása

  5. ADATSZERKEZETEK Hierarchikus Asszociatív Szekvenciális Hálós Tömb Tábla Sor Fa Ir. gráf Hálózat Verem Adatszerkezetek rendszerezése azelemek közötti kapcsolatok alapján

  6. Asszociatív csoport Asszociatív adatszerkezet Szekvenciális adatszerkezet

  7. Hierachikus adatszerkezet Hálós adatszerkezet

  8. Absztrakt tárolók • Címezhető tárolókon absztrakt tárolási lehetőségek: • Egydimenziós tömb • Láncolt lista • Absztrakt tároló helye: bármilyen címezhető hardver elem (pl. memória, lemezes egység) • Az adatszerkezetek leképezhetők absztrakt tárolókra Egydimenziós tömb • A tárolt objektumok közvetlenül egymás után helyez-kednek el, ugyanolyan távolságra egymástól • Elemei indexeléssel közvetlenül címezhetők

  9. 1 2 3 n ... L Adat Mutató Végjel Láncolt lista • Elemei mutatókon keresztül össze vannak kapcsolva • A listát az első listaelem mutatója (L) meghatározza • Egy listaelem: adat + mutató Egyirányú nyíltvégű láncolt lista

  10. Láncolt lista (folyt.) • Elemei fizikailag bárhol elhelyezkedhetnek • Előnye: beszúrás, törlés egyszerű • Változatai: • Nyíltvégű lista • Cirkuláris (zárt) lista • Rendezett lista • Kétirányú (szimmetrikus) lista • Fejelt lista • Multilista (többszörös lista)

  11. Tömb • Asszociatív adatszerkezet • Fajtái: • Általános tömb • Ritka mátrix Általános tömb • Elemei indexeléssel közvetlenül elérhetők • Hátrányai • méretét előre meg kell adni • indexhatárok dimenziónként kötöttek • Tárolás: egydimenziós tömbben(az adatszerkezet általában maga a tároló)

  12. Ritka mátrix • Olyan többdimenziós tömb, ahol a tömb nagy része kihasználatlan • Tárolás: láncolt listában

  13. Kérem azt az adatot, melynek kulcsa ... Tábla • Asszociatív adatszerkezet • Egy elem: egyedi kulcs + adat • Tárolás: egydimenziós tömbben vagy láncolt listában

  14. Táblák osztályzása (tárolási mód alapján) • Soros tábla • Önátrendező tábla • Rendezett tábla • Hasító (kulcstranszformációs) tábla Hasítótábla (hash table) • Hasítófüggvény (kulcstranszformációs függvény):kulcs  elem fizikai címe • Hasonlítgatások száma minimális • Legjobb táblaszervezési mód: egyértelmű leképezés a kulcsok és a fizikai címek között • Szinonímák • azonos címre leképezett kulcsok • megvalósítás: láncolt listával

  15. Hasítófüggvény Kulcs Hasító(Kulcs) Kulcs+Adat Kulcs Kulcs+Adat Kulcs+Adat Kulcs+Adat Kulcs+Adat Hasítótábla egyértelmű leképezéssel Hasítótábla szinonímákkal

  16. PUSH POP Legfiatalabb Legidősebb Verem (stack) • Szekvenciális adatszerkezet • LIFO (Last In First Out) szerkezet • Műveletei: PUSH, POP, TOP

  17. Verem (folyt.) • Tárolás: általában egydimenziós tömbben • Alkalmazásai: • Elemek sorrendjének megfordítása • Visszatérési utak megjegyzése • Memóriaverem: metódusok hívásakor a visszatérési címek és lokális változók tárolása

  18. GET ... PUT Utolsó Legfiatalabb Első Legidősebb Sor (queue) • Szekvenciális adatszerkezet • FIFO (First In First Out) adatszerkezet • Műveletei: PUT, GET, FIRST

  19. 1. 2. 3. 4. 5. ... Max — 34 66 2 999 7 — — Első Utolsó Sor (folyt.) • Tárolás: egydimenziós tömbben vagy láncolt listában Ciklikus tárolás egydimenziós tömbben: • Alkalmazása: elemek feldolgozása érkezési sorrendbenPéldául: pufferek (billentyűzetpuffer, nyomtatópuffer)

  20. Gyökér 0. szint 1. szint Elágazás (3 fokú) Részfa Levél (0 fokú) 3. szint e f a b g c d Fa • Hierarchikus adatszerkezet • Elemei: csomópontok és egyirányú kapcsolatok • Rekurzív definíció, rekurzív algoritmusok

  21. e f a b g c d Fával kapcsolatos fogalmak • Kezdőpont, végpont • Gyökér, elágazás, levél • Csomópont foka, fa foka • Szülő, gyerek • Szintszám • Fa magassága • Rendezett fa • Kiegyensúlyozott fa

  22. e f a b g c d Fa bejárása • Gyökérkezdő (preorder) a b c d g e f • Gyökérvégző (postorder) b c a b d e f c a b g d e f c a

  23. e d a j i c b f h g Bináris fa Gyökeréből legfeljebb két részfa ágazik: baloldali és jobboldali részfa Bejárása • Gyökérkezdő (preorder) a b d c e g h i j f • Gyökérközepű (inorder) d b a g e i h j c f • Gyökérvégző (postorder) d b g i j h e f c a

  24. 4 13 12 5 3 7 1 9 8 11 14 15 10 2 6 Rendezett bináris fa • Keresési fa (kereső fa, rendező fa) • A baloldali részfa összes eleme kisebb, mint a szülő • A jobboldali részfa összes eleme nagyobb, mint a szülő • Egy n szintű fa elemeinek száma maximum 2n+1-1 • Egy elemet maximum n+1 lépésben megtalálunk

  25. 4 13 12 5 3 7 1 9 8 11 14 15 10 2 6 Kiegyensúlyozott bináris fa Elemek beszúrási sorrendje: 8, 4, 12, 10, 9, 14, 2, 3, 6, 1, 15, 5, 7, 13, 11

  26. 13 12 3 4 5 8 1 2 6 14 9 10 11 7 15 Degenerált bináris fa Elemek beszúrási sorrendje: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15

  27. a b c d g e f Fa tárolása multilistában

  28. e d a c b d 4 1 c 7 2 a 9 2 b Hálós adatszerkezetek Irányított gráf Hálózat

  29. V. Adatszerkezetek, kollekciók 21. Kollekció keretrendszer 1. A kollekció keretrendszer felépítése 2. A Collection interfész és leszármazottai 3. A HashSet osztály – hasítási technika 4. A TreeSet osztály – Comparator 5. Iterátor 6. A List interfész implementációi 7. A Map és a SortedMap interfész 8. A Hashtable osztály 9. A TreeMap osztály

  30. Kollekció keretrendszer (Collections Framework) • Interfészeket és osztályokat definiál különböző konténerek hatékony létrehozása céljából • Elemei: • Interfészek • kollekció • térkép • iterátor • Implementációk (osztályok) • Algoritmusok (Collections osztály)

  31. Interfészek Osztályok «interfész» Collection ArrayList «interfész» Set «interfész» List HashSet Stack Vector LinkedList «interfész» SortedSet TreeSet Algoritmusok Hashtable Collections «interfész» Map «interfész» Iterator HashMap «interfész» SortedMap «interfész» ListIterator TreeMap Kollekció keretrendszer

  32. «interfész» Collection ArrayList «interfész» Set «interfész» List HashSet Stack Vector LinkedList «interfész» SortedSet TreeSet A Collection interfész és leszármazottai

  33. «interfész» Collection size(): int isEmpty(): boolean contains(elem: Object): boolean containsAll(c: Collection): boolean add(elem: Object): boolean addAll(c: Collection): boolean remove(elem: Object): boolean removeAll(c: Collection): boolean retainAll(c: Collection): boolean clear() equals(o: Object): boolean toArray():Object[] toArray(Object a[]):Object[] iterator(): Iterator Collection interfész (kollekció) • Objektumokat tárol • Van legalább két konstruktora: • paraméter nélküli • kollekcióval paraméterezett • Nincs példányosítható implementációja a keretrendszerben • Bejárás iterátorral

  34. «interfész» Set «interfész» SortedSet first(): Object last(): Object comparator(): Comparator headSet(toElement: Object): SortedSet tailSet(fromElement: Object): SortedSet subSet(fromElement: Object, toElement: Object): SortedSet Set interfész (halmaz) • Elemei • egyediek • nem rendezettek • Implementációja:HashSet SortedSet interfész (rendezett halmaz) • Elemei • egyediek • rendezettek • Implementációja:TreeSet

  35. «interfész» List get(index: int): Object set(index: int, elem: Object): Object add(index: int, elem: Object) addAll(index: int, c: Collection): boolean remove(index: int): Object indexOf(o: Object): int lastIndexOf(o: Object): int listIterator():ListIterator listIterator(index: int): ListIterator List interfész (lista) • Elemei • nem egyediek • egy meghatározott sorrendben követik egymást • indexelhetők • Implementációi:ArrayList, Vector,LinkedList, Stack

  36. n e o H t a 0 1 2 ... 6 7 ... 9 "Hottentotta" karaktereinek hasítása Csoportindex A HashSet osztály – hasítási technika • Hasítókód (hashCode, hasítófüggvény) • Kapacitás: hasítással előállított csoportok száma • Hasítókód normalizálása:csoportindex = obj.hashCode() % kapacitás • Telítettség: elemszám / kapacitás • Telítettségi küszöb Character kar = new Character('H'); kar.hashCode() == 72 csoportindex == kar.hashCode()%10 == 2 Kapacitás: 10 Elemszám: 6 Telítettség: 0.6 Telítettségi küszöb: 0.9

  37. Hasítófüggvény készítésének szabályai • Egy objektumnak mindig ugyanazt a hasítókódot kell generálnia • o1.equals(o2) hashCode(o1)==hashCode(o2) • Egyenletes eloszlásra törekvés • Hashset-be beteendő objektumok osztályában (szükség esetén) átírandó metódusok: • hashCode • equals

  38. HashSet osztály • Halmaz (Set interfész implementációja) • Megvalósítás: hasítási technikával (hasítótáblával) • Gyors műveletek, megjósolhatatlan bejárás • Alkalmazás • Egyedi, rendezetlen elemeket tartalmazó kollekció • Nagy elemszám esetén nagyon hatékony! • Konstruktorok, metódusok • HashSet()HashSet(int initialCapacity)HashSet(int initialCapacity, float loadFactor)HashSet(Collection c) • String toString()  [elem,elem,...]

  39. szoveg:String charAt() :Character betuk: HashSet :Character HashSetBetuk :Character add() contains()? • Feladat – HashSetBetuk • Kérjünk be konzolról egy karakterláncot! Írjuk ki a benne szereplő betűket ábécérendben (mindegyiket csak egy-szer)! Együttműködési diagram

  40. public class HashSetBetuk { public static void main(String[] args) { HashSet betuk = new HashSet(); String szoveg = Console.readLine("Szöveg= "); for (int i=0; i<szoveg.length(); i++) betuk.add(new Character(szoveg.charAt(i))); System.out.println(betuk); for (char c=0; c<Character.MAX_VALUE; c++) if (betuk.contains(new Character(c))) System.out.print(c); System.out.println(); } }

  41. Feladat – HashTorpe • Az emberre jellemző a neve és a magassága: e két adattal inicializáljuk őket. Tartsunk nyilván embereket, de két ugyanolyan nevű ember nem szerepelhet a nyil-vántartásban! • Vegyük nyilvántartásba a hét törpét! Végül listázzuk ki a felvitt emberek adatait (név, magasság) egymás után!

  42. ... ... ... ... ... ... H K M S T V Hapci Tudor Szundi Vidor Kuka Szende Morgó 122 126 146 126 128 104 112 A 26 felé hasított hét törpe

  43. class Ember { private String nev; private int magassag; public Ember(String nev, int magassag) { this.nev = nev; this.magassag = magassag; } public String getNev() { return nev; } public int getMagassag() { return magassag; }

  44. public int hashCode() { if (nev.length() == 0) return 0; return Character.toUpperCase(nev.charAt(0)); } public boolean equals(Object obj) { if ((obj != null) && (obj instanceof Ember)) return nev.equals(((Ember)obj).getNev()); return false; }

  45. public String toString() { return Format.left(nev,10) + Format.right(magassag,3); } } // Ember public class HashTorpe { public static void main(String[] args) { HashSet torpek = new HashSet(26); torpek.add(new Ember("Morgó",112)); torpek.add(new Ember("Szende",104)); torpek.add(new Ember("Hapci",122));

  46. torpek.add(new Ember("Kuka",126)); torpek.add(new Ember("Tudor",126)); torpek.add(new Ember("Szundi",146)); torpek.add(new Ember("Vidor",128)); torpek.add(new Ember("Hapci",100)); // Hatástalan torpek.add(new Ember("Tudor",128)); // Hatástalan System.out.println("Törpék száma: "+torpek.size()); System.out.println(torpek); } } // HashTorpe

  47. A TreeSet osztály - Comparator • Rendezett halmaz (SortedSet interfész impl.) • Megvalósítás: kiegyensúlyozott fával • Halmazba tett objektumok összehasonlíthatóakKét eset: • Osztályuk implementálja a Comparable interfészt (természetes össszehasonlítás) • TreeSet konstruktorában megadunk egy összehasonlító (comparator) objektumot • Alkalmazás • Egyedi, rendezett elemeket tartalmazó kollekció • Nagy elemszámnál a keresés nagyon hatékony!

  48. Konstruktorok, metódusok • TreeSet() • TreeSet(Collection c)TreeSet(SortedSet s) • TreeSet(Comparator comp) • Comparator comparator() Comparator interfész • Céljai: • más rendezettség megadása(a természetes rendezettségen túl) • rendezettség megadása kívülről • Implementációjának példánya egy összehasonlító objektum, mely átadható a TreeSet konstruktorának • Metódusa • public int compare(Object a, Object b)

  49. Feladat – TreeSetNevek • Tegyünk be keresztneveket egy konténerbe! Ne vigyünk be egyforma neveket! Írjuk ki a neveket először névsor szerint, azután névhosszúság szerinti rendezettségben! import java.util.*; public class TreeSetNevek { public static void main(String[] args) { TreeSet nevsor = new TreeSet(); nevsor.add("Soma"); nevsor.add("Jeremiás"); nevsor.add("Janka");

  50. // Kiírás névsorban: System.out.println(nevsor); TreeSet nevek = new TreeSet(new Comparator() { public int compare(Object a, Object b) { return ((String)a).length() - ((String)b).length(); } } ); nevek.addAll(nevsor); System.out.println(nevek); } }

More Related