Adatszerkezetek 1. előadás Irodalom: Lipschutz: Adatszerkezetek Morvay, Sebők: Számítógépes adatkezelés Cormen, Leiserson, Rives, Stein: Új algoritmusok http://it.inf.unideb.hu/~halasz http://it.inf.unideb.hu/adatszerk http://www.inf.unideb.hu/~panovics/adatszerk.html Követelmények: két zh írásbeli vizsga
Bevezetés Absztrakció, modellalkotás A valós világ rendszereinek alkotóelemei az egyedek, melyek tulajdonságokkal, és viselkedésmőddal rendelkeznek. tulajdonság statikus jellemző viselkedésmód dinamikus jellemző, az egyedek egymáshoz való kapcsolatát jellemzi Modellalkotás: lényeges jellemzők kiemelése, lényegtelenek figyelmen kívül hagyása
Modellalkotás A modellezés lényege: absztrakció Azon tulajdonságok , melyek lehetőleg minél több egyednél megtalálhatóak: az egyedek karakterisztikus tulajdonságai Viselkedésmód elemek A modell nem egyedi dolgokkal, hanem ezen dolgok absztrakt osztályaival foglalkozik. Informatikában: tulajdonság: adat viselkedésmód: program
Modellalkotás Logikai szint Fizikai szint absztrakt adatszerkezetek, melyek függetlenek a platformtól, a számítőgéptől Fizikai szint hardver + szoftver az adatok tárolására szolgáló hely memória (tár) háttértároló (állományok) Kölcsönösen egyértelmű leképezés van a két szint között
Absztrakt adatszerkezetek Adatelemekből állnak Ezek lehetnek egyszerűek (atomiak) összetettek Az adatelemeknek van egyszerűnek: 1 értéke van összetett: egy értékcsoport alkotja az értékét Az adatelemek között jól meghatározott kapcsolatrendszer van. Adatlem + kapcsolatrendszer = Abszt. adatszerk.
Absztrakt adatszerkezetek csoportosítási szempontjai Adatelemek száma változik-e időben statikus dinamikus (akár 0 is lehet) Adatelemek típusa homogén (az összes adatelem típusa azonos) heterogén fenti két szempont „ortogonális”, azaz egymástól teljesen független
Absztrakt adatszerkezetek csoportosítási szempontjai Adatelemek közötti kapcsolatok szerint homogén adatszerkezetben struktúra nélküli (nincs kapcsolat, pl. halmaz) asszociatív (pl. tömb) szekvenciális (minden a.e. két másik a.e.-el van kapcsolatban, kivéve az elsőt és az utolsót, minden adatelemnek van egy megelőzője és egy rákövetkezője) hierarchikus (minden adatelemnek egy megelőzője és akárhány rákövetkezője van, pl. FA) hálós (minden adatelemnek tetszőleges számú megelőzője és rákövetkezője lehet) heterogén adatszerkezet esetén nem csoportosítunk a kapcsolatok szerint, mindig rekord adatszerkezetről beszélünk.
Absztrakt adatszerkezetekkel végezhető műveletek Létrehozás Az üres szerkezeti váz kialakítása az adatelemek értékei is megadhatóak Módosítás nem érinti a szerkezetet, csak az egyes adatelemeket bővítés (dinamikus adatszerkezeteknél) törlés (fizikai és logokai) (csak din. ad.sz.) csere (meglévő a.e. értékét felülírjuk) (logikai törlés = speciális csere: érték felülírása speciális bitkombinációval)
Absztrakt adatszerkezetekkel végezhető műveletek Rendezés: segítségével az adatszerkezet elemeit egy (elsődleges) kulcs értékei alapján sorba rendezzük. szélsőérték kiválasztásos beszúró buborék shell gyors Keresés (van-e, esetleg hány van) teljes lineáris (rendezett) bináris (rendezett, folytonos tárolású)
Absztrakt adatszerkezetekkel végezhető műveletek Elérés segítségével hozzá tudunk férni, meg tudjuk fogni az adatszerkezet egy elemét közvetlen (többi adatelemtől független elérés) szekvenciális (adatelemek közötti kapcsolat alapján) Bejárás melynek során az összes elemet érintjük Feldolgozás hozzáférünk az a.e.-ekben tárolt információhoz, azokon valamilyen tevékenységet hajtunk végre
Ábrázolási módok (tárolási modellek, fizikai szint) Folytonos (vektorszerű) Szétszórt (láncolt) Az adatelemek a memóriában tárhelyen vannak elhelyezve. Egy tárhely: egy bájtcsoportot jelent, amely tárolja az adatelem értékét és szerkezetleíró információt hordozhat
Folytonos (vektorszerű) tárolás Egy tárhely – egy adatelem értéke A tárhelyek a memóriában egy folytonos, összefüggő tárterületet alkotnak, a tárhelyek mérete azonos Előnyei: közvetlen elérés, a kezdőcím és a tárhely mérete alapján csere műveletet könnyű megvalósítani hatékony rendező algoritmusok hatékony kereső algoritmusok Hátránya: nem segíti a bővítést és a fizikai törlést
Szétszórt (láncolt) ábrázolás A tárhelyen az adatelem értéke (érték rész) mellett legalább egy mutató (mutató rész) értékét tároljuk. Mutató: tipikusan memóriacím A tárhelyek mérete nem feltétlen azonos, elhelyezkedésük a memóriában tetszőleges Szétszórt ábrázolás fajtái: egyirányban láncolt lista cirkuláris lista kétirányban láncolt lista multilista
Egyirányban láncolt lista A tárhely (listaelem) az adatelem értékén kívül egy mutatót tartalmaz, amely a következő listaelem címét tartalmazza. A láncolt lista első elemének címét egy, a láncszerkezeten kívüli mutató, a fejmutató tárolja. A fejmutató nem taratlmaz egyéb adatot a mutatón kívül, így nem része az adatszerkezetnek, csak a hozzáférést biztosítja ahhoz. A láncolt lista végét egy speciális érték, a NIL jelzi. Amennyiben a fejmutató értéke NIL, akkor a lista üres.