Adatszerkezetek Összetett adattípus Meghatározói: A felvehető értékek halmaza Az értékhalmaz struktúrája Az ábrázolás módja Műveletei Adatszerkezet fogalma Direkt szorzat Minden eleme a T i halmazokból vett értékek direkt szorzata Unió Értékeit n db különböző típus valamelyikéből veszi Sokaság Véges számú, azonos típusú elemekből áll Az értékhalmaz struktúrája 1
Típuskonstrukciós műveletek Elem felvétele (adott helyre, elejére, végére, ) Elem törlése (adott helyről, adott érték, ) Szelekciós műveletek Elem keresése (hely alapján, érték alapján, kulcs alapján, függvény alapján, ) Műveletek Részek függvénnyel kiválasztása A típus ábrázolása annyi biten történik, ahány biten az egyes résztípusok összesen ábrázolhatók Pl.: C# bitenkénti felsorolás típusa Részek névvel kiválasztása (rekord, osztály) Direkt szorzat típusok Újradefiniálás Ugyanazokhoz az adatokhoz más és más módon férhetünk hozzá (C, C++ unió típusa) Alternatív rekord Feltételtől függően a rekord vagy egyik, vagy másik típusú értéket tárol (Pascal alternatív rekord típusa) Unió típusok 2
Sorrend nélküli sokaságok Halmaz Multihalmaz Intervallumhalmaz Hasító táblázat Sorozat típusok Verem, sor, prioritási sor, lista, Hierarchikus típusok Fa, bináris fa, B-fa, Hálós típusok Gráfok Sokaság típusok Ábrázolás: A halmazbeli elemek értékeinek felsorolása A halmazbeli elemek értékének megfelelő bit beállítása A halmazbeli elemek értékeinek megfelelő sorszámú logikai érték igazra állítása Halmaz Az elemek között egyértelmű sorrend áll fenn Speciális műveleteik: Első, utolsó Elejére, végére Elsőutániak, utolsóelőttiek Ábrázolási módok: Folytonos (szekvenciális) Láncolt Blokkolt Sorozat típusok 3
Az adatszerkezet elemei egy egybefüggő memóriaterületen egymás után helyezkednek el Az egyes elemekhez indexeléssel férhetünk hozzá 0. 1. 2. n. Előnyök: elemek elérése, keresése egyszerű Hátrányok: törlés, beszúrás nehéz, sok mozgatással jár, elemek száma rögzített Szekvenciális ábrázolás Az elemek fizikai és logikai sorrendje eltérő. A logikai sorrendet a következő elem helyének tárolásával valósítjuk meg. Fajtái: Statikusan láncolt ábrázolás Dinamikusan láncolt ábrázolás Előnyök: könnyű beszúrás, törlés, elemek száma dinamikusan változhat Hátrányok: nehéz a keresés Láncolt ábrázolás Az elem után következő elem sorszámát (indexét) tároljuk -1 Első elem = 2. 0. 3. 1. Statikusan láncolt ábrázolás 4
Az elem után következő elem referenciáját, vagy mutatóját tároljuk Első elem Dinamikusan láncolt ábrázolás Egy blokk több elemet és egy hivatkozást tárol a következő blokkra Egy blokkon belül az elemek indexeléssel érhetők el Első elem Blokkolt ábrázolás Last In First Out (LIFO): a legutoljára betett elemet lehet legelőször kivenni Utolsó elem Műveletei: Push, Pop, Üres_e, Tele_e Verem adatszerkezet 5
First In First Out (FIFO). A legelőször betett elemet lehet legelőször kivenni. Kivétel helye Betétel helye Műveletei: Sorba, Sorból, Üres_e, Tele_e Sor adatszerkezet Ciklikus sor Ha valamelyik mutató a sor végére ér, akkor folytatja a mozgását a sor elején Prioritási sor (rendezett sor) Minden elem mellett egy rendezési szempont alapját képező értéket is tárolunk Vagy az elem betételét, vagy kivételét végezzük a rendezési szempont alapján Speciális sor adatszerkezetek Lukasievitz lengyel matematikusról nevezték el A kifejezések zárójelek nélküli leírását teszi lehetővé Változatai: Prefix: a műveletek operandusaik előtt szerepelnek Pl.: infix: (a+b)*(a-b) Prefix lengyel-forma:*+ab-ab Postfix: a műveletek operandusaik mögött szerepelnek Pl.: infix: (a+b)*(a-b) Prefix lengyel-forma:ab+ab-* Lengyel-forma 6
1. Infix, zárójeleket is tartalmazó kifejezés lexikális egységeinek azonosítása 2. Infix, zárójeleket is tartalmazó kifejezés postfix lengyel-formára alakítása 3. Postfix lengyel-formájú kifejezés értékének kiszámítása Kifejezések kiértékelése Lengyelformával Operandusok a kimenetre Művelet: Ha a veremben nála nagyobb, vagy egyenlő prioritású művelet van, akkor kivenni a veremből és kiírni a kimenetre Művelet betétele a verembe Nyitó zárójel: Betétel a verembe Záró zárójel: Műveletek kivétele a veremből és kiírása a kimenetre a nyitó zárójelig Nyitó zárójel kivétele a veremből Postfix lengyel-forma elkészítése Operandus: Betétel a verembe Művelet (n operandusú): A verem tetején lévő n db operandus kivétele a veremből A művelet elvégzése Az eredmény visszaírása a verembe A műveletsor végén a kifejezés eredménye a veremben lesz Postfix lengyel-formájú kifejezés értékének kiszámítása 7