Algoritmusok és adatszerkezetek I 1 előadás
Típusok osztályozása Összetettség (strukturáltság) szempontjából: elemi (vagy skalár, vagy strukturálatlan) összetett (más szóval strukturált) Strukturálási módok Keresztszorzat AxB Unió AB Sokaság sok azonos típusú elem Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 2/33
Típusok osztályozása Sokaság osztályozása rákövetkezés szerint Halmaz: nincs rákövetkezési reláció Sorozat: minden elemet egy elem követ és egy előz meg (kivéve esetleg a két szélső elemet) Hierarcikus struktúra: minden elemet egy előz meg, de több is követet Hálós struktúra: minden elemet több előzet meg és több is követet Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 3/33
Típusok osztályozása Sokaságtípusok megjelenése Halmaz: almaz, multialmaz, intervallumalmaz, táblázat, diszjunkt almazfelbontás Sorozat: tömb, verem, sor, prioritási sor, lista Hierarcikus struktúra: bináris fa, nem bináris fa Hálós struktúra: irányítatlan gráf, irányított gráf Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 4/33
Sorozattípus műveletei Üres Létreoz, elemek nélkül Létreoz Létreoz, struktúrától függő elemekkel Üres?/Teli? Ellenőrzi, ogy van-e eleme / bővítető lenne-e? Elemszám Hány eleme van? Beilleszt Struktúrától függő elyre új elemet illeszt Kiagy Struktúrától függő elyről elemet agy el Első/Utolsó Első / utolsó elemének értékét adja Elejéről/Végéről Kiveszi a sorozat első / utolsó elemét Elsőutániak/Utolsóelőttiek Eldobja az első / utolsó elemet Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 5/33
Sorozattípus műveletei Elejére/Végére Érték Módosít Elsőre/Utolsóra A sorozat első eleme elé / utolsó eleme mögé illeszt egy újat Struktúrától függően megatározott elemének értékét adja vissza Struktúrától függően megatározott elemének új értéket ad A struktúra első / utolsó elem lesz az aktuális (a volt ilyen) Előzőre/Következőre A struktúra aktuális eleme (a volt ilyen) legyen az eddigit megelőző / követő Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 6/33
Sorozattípusok fajtái Típuskonstrukció Tömb Lista Sor Prioritási sor Verem InputSzekvenciálisFile OutputSzekvenciálisFile DirektFile AsszociatívFile Tevékenységalmaz (Létreoz, Elemszám,) Érték, Módosít Üres, Üres?, Teli?, Beilleszt, Kiagy, Elsőre, Utolsóra, Előzőre, Következőre, Érték, Módosít Üres, Üres?, Teli?, Elemszám, Első, Elejéről, Végére Üres, Üres?, Teli?, Elemszám, Első, Elejéről, Üres, Üres?, Teli?, Elemszám, Első, Elejére, Elejéről Üres?, Elejéről Üres, Végére Üres, Létreoz, Üres?, Teli?, Elemszám, Érték, Módosít Üres, Üres?, Teli?, Elemszám, Érték, Módosít Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 7/33
Sorozat típusok ábrázolása Folytonos, szekvenciális ábrázolás: az elemeket a memóriában a kezdőcímtől szorosan egymásután elyezzük el, a tárolás sorrendje megegyezik a logikai sorrenddel Az elemek címe számítató Memória Elemsorszám: 1 2 3 N kezdőcím Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 8/33
Sorozat típusok ábrázolása Láncolt ábrázolás: az elemek a memóriában folytonos területen elyezkednek el, a rákövetkezést index-szel biztosítjuk (statikus láncolás) Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 9/33
Sorozat típusok ábrázolása Láncolt ábrázolás: az elemek a memóriában folytonos területen elyezkednek el, a rákövetkezést mutatóval biztosítjuk (dinamikus láncolás) Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 10/33
Sorozat típusok ábrázolása Blokkolt ábrázolás: ötvözi az előbbi kettőt úgy, ogy láncot oz létre az elemek egy adott számú elemet tartalmazó tömbjéből Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 11/33
Sorozat típusok ábrázolása Folytonos, szekvenciális ábrázolás: atékony elykiasználás címkiszámítás (címfüggvény) leetősége struktúra módosítás (beszúrás, törlés) munkaigényes előre rögzített memóriaméret Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 12/33
Sorozat típusok ábrázolása Statikus láncolás: elyfoglalás növekedés (minden elem mellé kell egy index) címkiszámítás nem leetséges adott elem eléréséez a struktúra egy részét be kell járni struktúra módosítás (beszúrás, törlés) gyors előre rögzített maximális memóriaméret Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 13/33
Sorozat típusok ábrázolása Dinamikus láncolás: elyfoglalás növekedés (minden elem mellé kell egy mutató) címkiszámítás nem leetséges adott elem eléréséez a struktúra egy részét be kell járni struktúra módosítás (beszúrás, törlés) gyors az igényeknek megfelelően változó memóriaméret Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 14/33
Ábrázolások megvalósítása Folytonos, szekvenciális ábrázolás: tömb elemek sorozata, elem=(ossz,értékek) vagy (értékek,végjel) Láncolás: első elem, elem=(érték, következő elem) Blokkolás: első blokk, blokk=(elemszám, tömb, következő blokk) Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 15/33
Ábrázolások megvalósítása Statikus láncolás, blokkolás: első, következő megadása = tömbindex Dinamikus láncolás, blokkolás: első, következő megadása = mutató Megjegyzés: nem kizárt, ogy egy elemez több következő is tartozzon kétirányú láncolás, ierarcikus és álós típusok! Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 16/33
Tömbök Emlékeztető: vektor, mátrix, mátrixok ábrázolása (sorfolytonos, oszlopfolytonos) címfüggvények cím(a,i)=kezdőcím(a)+(i-1)*elemméret cím(b,i,j)=kezdőcím(b)+((i-1)*sorok száma+j-1)*elemméret sorfolytonos ábrázolás esetén Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 17/33
Tömbök Emlékeztető: speciális vektorok (számtani sorozat, mértani sorozat) Speciális mátrixok (diagonális mátrix, alsó és felső áromszög mátrix, szimmetrikus mátrix, Toeplitz-mátrix, Hankel-mátrix, Vandermonde mátrix) a 0 0 0 b 0 0 0 0 c 0 0 0 0 0 x 0 0 0 y t1 t3 0 t t t 2 4 6 0 t t 5 7 0 t 8 t t?? 0 t t t??? 0 t? t? 0 0 0 1,1 1,1 1,2 1,3 1,n 1,2 2,2 0 0 1,2 2,2 2,3 2,n 1,3 2,3 3,3 0 1,3 2,3 3,3 3,n 0 1,n 2,n 3,n n,n 1,n 2,n 3,n n,n a b d c a b d e c a b a b d c a b e c a d b a b a c a c e d b a d b a c a c e Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 18/33
Hézagosan kitöltött tömbök Hézagosan kitöltött vektor elemfelsorolással: x i db,(i,x),(j,y), azaz a felesleges elemeket nem tároljuk, az értékes elemek indexét és értékét felsoroljuk Indexelés: keresés programozási tétel y j Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 19/33
Hézagosan kitöltött tömbök Érték(X,i): j:=1 Ciklus amíg j Xdb és i Xt(j)index j:=j+1 Ciklus vége Ha j Xdb akkor Érték:=Xt(j)érték különben Érték:=nemdef Függvény vége Megjegyzés: atékonyabb lenne index szerint növekvő sorrendben Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 20/33
Hézagosan kitöltött tömbök Módosít(X,i,e): j:=1 Ciklus amíg j Xdb és i Xt(j)index j:=j+1 Ciklus vége Ha j Xdb akkor Xt(j)érték:=e különben Xdb:=Xdb+1 Xt(Xdb)érték:=e Xt(Xdb)index:=i Eljárás vége Megjegyzés: a beszúrás lassúbb lenne index szerint növekvő sorrendben Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 21/33
Hézagosan kitöltött tömbök ElemTöröl(X,i): j:=1 Ciklus amíg j Xdb és i Xt(j)index j:=j+1 Ciklus vége Ha j Xdb akkor Xt(j):=Xt(Xdb) Xdb:=Xdb-1 Eljárás vége Megjegyzés: a törlés lassúbb lenne index szerint növekvő sorrendben Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 22/33
Hézagosan kitöltött tömbök Hézagosan kitöltött mátrix elemfelsorolással: x y z db,(i,j,x),(k,l,y),(p,q,z) azaz a felesleges elemeket nem tároljuk, az értékes elemek indexét és értékét felsoroljuk Indexelés: keresés programozási tétel Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 23/33
Hézagosan kitöltött tömbök Problémák: rendezett vektor esetén lassú az új elem beillesztés a mátrix elemeit ogyan rendezzük? sorfolytonosan? oszlopfolytonosan? bármelyik esetén lassú a másik irány szerinti elérés Megoldás: láncolás Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 24/33
Hézagosan kitöltött tömbök Hézagosan kitöltött vektor statikus láncolással Elem=(index,érték,következő) Érték(X,i): s:=xelső Ciklus amíg s seova és Xelem(s)index<i s:=xelem(s)következő Ciklus vége Ha s seova és Xelem(s)index=i akkor Érték:=Xelem(s)érték Eljárás vége Megjegyzés: index szerint növekvő sorrendben Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 25/33
Hézagosan kitöltött tömbök Hézagosan kitöltött vektor dinamikus láncolással Elem=(index,érték,következő) Érték(X,i): s:=xelső Ciklus amíg s seova és tartalom(s)index<i s:=tartalom(s)következő Ciklus vége Ha s seova és tartalom(s)index=i akkor Érték:=tartalom(s)érték Eljárás vége Megjegyzés: index szerint növekvő sorrendben Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 26/33
Hézagosan kitöltött tömbök Hézagosan kitöltött vektor dinamikus láncolással Módosít(X,i,e): előző:=seova; s:=xelső Ciklus amíg s seova és tartalom(s)index<i előző:=s; s:=tartalom(s)következő Ciklus vége Ha s seova és tartalom(s)index=i akkor tartalom(s)érték:=e különben Lefoglal(p); Betesz(X,p,előző,i,e) Eljárás vége Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 27/33
Hézagosan kitöltött tömbök Hézagosan kitöltött vektor dinamikus láncolással Betesz(X,p,előző,i,e): tartalom(p)index:=i; tartalom(p)érték:=e; Ha előző=seova akkor tartalom(p)következő:=xelső Xelső:=p különben tartalom(p)következő:= tartalom(előző)következő tartalom(előző)következő:=p Eljárás vége Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 28/33
Hézagosan kitöltött tömbök Hézagosan kitöltött mátrix dinamikus láncolással sor(i) az i-edik sor első eleme oszlop(j) a j-edik oszlop első eleme elem=(érték, kövsor, kövoszlop) oszlopfej 1 1 2 2 j j M M 1 1 1,j 1,M 2 2 i i 2,2 i,1 i,j i,m N N N,1 sorfej sorfej Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 29/33
Hézagosan kitöltött tömbök Hézagosan kitöltött mátrix dinamikus láncolással Érték(X,i,j): s:=xsor(i) Ciklus amíg s seova és tartalom(s)oszlop<j s:=tartalom(s)kövoszlop Ciklus vége Ha s seova és tartalom(s)oszlop=j akkor Érték:=tartalom(s)érték különben Érték:=Nemdef Eljárás vége Megjegyzés: elég a sorban megkeresni, a ott van, akkor az oszlopban is van Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 30/33
Hézagosan kitöltött tömbök Hézagosan kitöltött mátrix dinamikus láncolással Módosít(X,i,j,e): Sorkeres(es,van,s,i,j) Ha van akkor tartalom(s)érték:=e különben Oszlopkiválaszt(eo,i,j) Lefoglal(p); tartalom(p)érték:=e tartalom(p)sor:=i tartalom(p)oszlop:=j Sorba(X,es,p,i); Oszlopba(X,eo,p,j) Eljárás vége Megjegyzés: a a sorban megtaláltuk, módosítató, a nem, akkor keressük az oszlopban is és mindkettőbe betesszük Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 31/33
Hézagosan kitöltött tömbök Hézagosan kitöltött mátrix dinamikus láncolással Sorba(X,előző,p,i): Ha előző=seova akkor tartalom(p)kövoszlop:=xsor(i)első Xsor(i)első:=p különben tartalom(p)kövoszlop:= tartalom(előző)kövoszlop tartalom(előző)kövoszlop:=p Eljárás vége Szlávi Péter, Zsakó László: Adatszerkezetek I 20170213 10:52 32/33
Algoritmusok és adatszerkezetek I 1 előadás vége