Egyirányban láncolt lista



Hasonló dokumentumok
Adatszerkezetek 1. előadás

10. előadás Speciális többágú fák

A lista adatszerkezet A lista elemek egymásutániságát jelenti. Fajtái: statikus, dinamikus lista.

Struktúra nélküli adatszerkezetek

Láncolt listák. Egyszerű, rendezett és speciális láncolt listák. Programozás II. előadás. Szénási Sándor

Láncolt Listák. Adat1 Adat2 Adat3 ø. Adat1 Adat2 ø Adat3

Láncolt listák. PPT 2007/2008 tavasz.

Láncolt listák Témakörök. Lista alapfogalmak

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

9. előadás. A táblázat. A táblázatról általában, soros, önátrendező, rendezett és kulcstranszformációs táblázat

A programozás alapjai előadás. [<struktúra változó azonosítók>] ; Dinamikus adatszerkezetek:

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

6. LISTÁK ábra. A lista absztrakt adatszerkezet (ADS)

Programozás I gyakorlat

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

Adatszerkezetek és algoritmusok

1.előadás Tornai Kálmán

5. SOR. Üres: S Sorba: S E S Sorból: S S E Első: S E

Programozás alapjai II. (7. ea) C++

Kulcs transzformációs táblázat

Adatszerkezetek 1. Dr. Iványi Péter

22. GRÁFOK ÁBRÁZOLÁSA

A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

Algoritmuselmélet 2. előadás

Táblázatok fontosabb műveletei 1

Algoritmusok és adatszerkezetek I. 1. előadás

Adatbáziskezelés. Indexek, normalizálás NZS 1

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

2. Milyen értéket határoz meg az alábbi algoritmus, ha A egy vektor?. (2 pont)

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus adatszerkezetek. Dinamikus adatszerkezetek. Önhivatkozó struktúrák. Önhivatkozó struktúrák

Hierarchikus adatszerkezetek

Buborékrendezés: Hanoi Tornyai: Asszimptótikus fv.ek: Láncolt ábrázolás: For ciklussal:

Algoritmusok és adatszerkezetek I. 4. előadás

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

Amortizációs költségelemzés

Generikus osztályok, gyűjtemények és algoritmusok

17. A 2-3 fák és B-fák. 2-3 fák

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

Algoritmusok és adatszerkezetek gyakorlat 07

6. előadás. Kiegyensúlyozottság, AVL-fa, piros-fekete fa. Adatszerkezetek és algoritmusok előadás március 6.

7. BINÁRIS FÁK 7.1. A bináris fa absztrakt adattípus 7.2. A bináris fa absztrakt adatszerkezet

Programozási technológia

Adatszerkezetek és algoritmusok

Adatszerkezetek I. 7. előadás. (Horváth Gyula anyagai felhasználásával)

Gráfok 1. Tárolási módok, bejárások. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor

Rekurzió. Dr. Iványi Péter

Algoritmuselmélet. 2-3 fák. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem. 8.

7 7, ,22 13,22 13, ,28

Adatszerkezetek 2. Dr. Iványi Péter

Programozás alapjai. 8. előadás

Tartalomjegyzék. Köszönetnyilvánítás. 1. Az alapok 1

Adatszerkezetek és algoritmusok

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések)

Ugrólisták. RSL Insert Example. insert(22) with 3 flips. Runtime?

adatszerkezetek 2007/7/6 15:51 page 27 #23

Adatszerkezetek I. 1. előadás

ADATSZERKEZETEK (VEREM, SOR)

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Programozás alapjai 9. előadás. Wagner György Általános Informatikai Tanszék

Algoritmusok és adatszerkezetek I. 3. előadás

ADATBÁZIS-KEZELÉS. Adatbázis-kezelő rendszerek

Hasító táblázatok. Hasító függvények, kulcsütközés kezelése. Programozás II. előadás. Szénási Sándor

21. Adatszerkezetek Az adattípus absztrakciós szintjei Absztrakt adattípus (ADT) Absztrakt adatszerkezet (ADS) Egyszerű adattípusok Tömbök

Adatszerkezetek 7a. Dr. IványiPéter

C++ programozási nyelv

3. TÖMBÖK A tömb absztrakt adattípus Legyen T az E alaptípus feletti k ( 1) dimenziós tömb típus. Vezessük be az I I1

Digitális technika VIMIAA01

Hierarchikus adatszerkezetek

Programozási segédlet

Belépés a GroupWise levelező rendszerbe az Internet felől

Adatszerkezetek Hasító táblák. Dr. Iványi Péter

Adatszerkezetek és algoritmusok

Érdekes informatika feladatok

Adatszerkezetek 2. Dr. Iványi Péter

Információs Technológia

10. tétel. Adatszerkezetek és algoritmusok vizsga Frissült: január 28.

2018, Diszkrét matematika

Java és web programozás

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

Elemi adatszerkezetek

file:///d:/okt/ad/jegyzet/ad1/b+fa.html

Adatszerkezetek I. 4. előadás

Fejlesztési specifikációk

Elengedhetetlen a játékokban, mozi produkciós eszközökben Nélküle kvantum hatás lép fel. Az objektumok áthaladnak a többi objektumon

Pénzügyi algoritmusok

(Solid modeling, Geometric modeling) Testmodell: egy létező vagy elképzelt objektum digitális reprezentációja.

tétel: különböző típusú adatokat csoportosít, ezeket egyetlen adatként kezeli, de hozzáférhetünk az elemeihez is

9. Állományok kezelése. Operációs rendszerek. Állomány (file) Könyvtár. Az állománykezelő feladatai. Az állományrendszer réteges implementációja

Láncolt lista. az itt adott nevet csak a struct deklaráción belül használjuk

Objektum Orientált Szoftverfejlesztés (jegyzet)

Adatszerkezetek I. 6. előadás

Programozás alapjai. 10. előadás

Algoritmusok és adatszerkezetek I. 5. előadás

Például számokból álló, egyszeresen láncolt lista felépítéséhez az alábbi struktúra definíciót használhatjuk:

2. AZ ADATTÍPUS ABSZTRAKCIÓS SZINTJEI

Átírás:

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 tartalmaz 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. Ha a fej értéke nem NIL, kötelezően mutat egy tárhelyre, amely tartalmazza a lista első elemét. 1

Egyirányban láncolt lista Kedvező a beszúrásos rendezés számára. Előnyös, hogy a módosítási műveletek nem igényelnek adatmozgatást, valamint dinamikusságából következően nem kell előre meghatározni a tárhelyek számát. Nehéz benne keresni. Csak a teljes, és rendezett listában a lineáris keresés valósítható meg. 2

Egyirányban láncolt lista: Létrehozás 1. A fejmutató létrehozása, és 2. feltöltése a NIL értékkel. Ezzel létrejött egy üres egyirányban láncolt lista. 3

Egyirányban láncolt lista: Bővítés (az elején) 1. Tárhelyet foglalunk az új elem számára 2. A tárhely (új listaelem) adat részébe beírjuk a tárolandó elem értékét. 3. A tárhely mutató részébe átmásoljuk a fejmutató értékét. (Most egy ideig egyszerre két mutató is kijelöli a lista eddigi első elemét.) 4. Fejmutatóba beírjuk az új elem tárhelyének címét. A 3. és 4. lépés nem felcserélhető! (Az algoritmusok végrehajtása szekvenciális.) Van még: Bővítés a lista végén Bővítés az aktuális elem előtt vagy után 4

adat1 adat2 adatn Fej TMP Uj adat? Uj adat 1 & 2 TMP 3 adat1 adat2 adatn Fej 4 Uj adat TMP 5

Egyirányban láncolt lista: Törlés Bármelyik elem törölhető, de előre meg kell határozni, melyik ez az elem. Ha nem úgy van megfogalmazva a feladat, hogy töröld az első elemet, akkor a törlés művelete minden esetben a törlendő elem keresésével kezdődik. Első elem tölése: 1. Ha a lista üres (fejmutató==nil), az algoritmus véget ért. 2. A fejmutató új értéke legyen, a fej által mutatott elem mutató részében tárolt érték (a következő elem címe). Ezután a lista egy elemmel kevesebbet tartalmaz. 6

Egyirányban láncolt lista: Csere Egyirányban láncolt listában a csere minden esetben kereséssel kezdődik. Ha a keresés sikeres, a megtalált értéket a csrélendő új értékkel felülírjuk. 7

Egyirányban láncolt lista: Rendezés Egyirányban láncolt listában lehet ugyan rendezni, de nem szokás. Helyette, ha fontos a lista rendezettsége (pl. mert szeretnénk teljes keresés helyett lineáris keresést alkalmazni), akkor a bővítés műveletét módosítjuk olyan módon, hogy a rendezett egyirányban láncolt lista a bővítés közben megőrizze rendezettségét. (Beszúró rendezés képezi az alapját a rendezett lista bővítésének.) 8

Egyirányban láncolt lista: Feldolgozás A feldogozásnak minden esetben a keresés vagy a bejárás az alapja. 9

Ciklikus lista Az egyirányban láncolt listának a feldolgozást segítő módosítása. Abban különbözik az egyirányban láncolt listától, hogy egyetlen listaelem sem tartalmaz a mutató részében NIL-t. Az utolsó elem mutató része a lista első elemére mutat. Ennek a listának is van fejmutatója, ami az első elemhez való hozzáférést segíti, illetve lehetővé teszi az utolsó elem felismerését, hiszen annak mutató része ugyanazt az értéket tartalmazza, mint a fejmutató. (Mindketten az első elemre mutatnak.) 10

Egyirányban láncolt lista: adat1 adat2 adatn Fej Ciklikus lista: Fej adat1 adat2 adatn 11

Kétirányban láncolt lista Az adatelemek itt is adat részből és muató részből állnak. DE a mutató rész két mutatót tartalmaz: Az egyik mutatja -mint eddig- a rákövetkező adatelem tárhelyét, a másik pedig a megelőző adatelem tárhelyét. Ebben a szerkezetben az adatelemekhez való hozzáférést a fejmutatón kívül még egy vége mutató is segíti. Ez utóbbi az utolsó adatelem tárhelyének címét tartalmazza. (Akár úgy is tekinthetünk rájuk, mint két egyirányban láncolt lista fejmutatóira.) Ebben a szerkezetben egyszerűbb a fizikai törlés, mivel közvetlenül meg tudjuk fogni a törlendő elem 12 megelőzőjét és rákövetkezőjét.

Egy irányban láncolt lista: adat1 adat2 adatn Fej Két irányban láncolt lista: Fej adat1 adat2 adatn Vége 13

Multilista (1) A listaelemek adatrésze összetett, több atomi értéket tartalmaz Mindegyik atomi értékre föl lehet építeni 1-1 láncolt listát Minden tárhely (legalább) annyi muatót tartalmaz, ahány listába szerveztük az elemeket. Annyi fejmutatóra van szükség, ahány listánk van. Minden elem benne van az összes listában. 14

Multilista (1): Betű X 2 Szám G 7 K 9 15

Multilista (2) Részláncokat hozunk létre. Azok az elemek kerülnek egy részláncba, melyeknek adatrésze megegyezik. Pontosan annyi részlánc van, ahány különböző érték fordul elő az adatelemek között. A részláncok nem fedik át egymást, minden atomi adatelem csak egyetlen részláncban szerepel. Annyi fejmutató létezik, ahány részlánc. 16

Multilista (2): Abc Def Qwe 4.érték 5.érték Abc Def Def Def Abc 5.érték Qwe Abc Qwe 17

Multilista (3) Itt a tárhelyekbe is be lehet építeni listafejeket. Egy listaelem adatrésze vagy tényleges atomi értéket tárol, vagy egy másik láncszerkezet első elemének a címét. Hogy a kettő közül melyiket, azt egy egyetlen biten tárolt információval dönthetjük el. Pl. 0 == > listafej 1 == > tényleges atomi érték 18

Multilista (3): Fej 0 0 1 Adat3 1 Adat1 0 1 Adat4 1 Adat5 1 Adat2 1 Adat6 19

Folytonos és szétszórt ábrázolás Az egyes absztrakt adatszerkezetek mind folytonos, mind szétszórt módon ábrázolhatóak. DE: a leképezés annál egyszerűbb, minél jobban illeszkedik egymáshoz az absztrakt adatszerkezet és a tárolási szerkezet. Az asszociatív adatszerkezetek nagyon jól tárolhatók folytonosan. A hierarchikus és hálós szerkezetek viszont elsősorban szétszórt módon kezelhetőek könnyen. A szekvenciális adatszerkezetek mindkét módon jól kezelhetőek. 20

Reprezentáció és Implementáció absztrakt adatszerkezet ->leképezés-> ábrázolás Absztrakt adatszerkezet reprezentációja: A tárolási mód Leképezés Absztrakt adatszerkezet implementációja: reprezentáció A műveleteket megvalósító algoritmusok Az algoritmusok megadhatóak: beszélt emberi nyelven mondatszerű leírással folyamatábrával pszeudonyelvvel (gyakorlatokon) Programozási nyelvven 21

Szabad helyek kezelése A memória véges. Az adatszerkezetek elemeit a memóriában tároljuk. == > A memóriával gazdálkodni kell. Ebben az egyik fontos elem, a felszabaduló tárhelyek újrahasznosítása. Két alapvető módszer Kézi (Manual memory management) NEW,. FREE,.. Hulladékgyűjtés (Garbage collection) NEW,. Mutató értékadások figyelése Már nem hivatkozott tárhelyek automatikus felismerése 22

Felszabadult helyek nyilvántartása, kezelése Szabad helyek nyilvántartása A szabad tárhelyeket a lefoglalt memória végére gyűjtjük össze. (Időigényes lehet.) Minden lefoglalt tárhelyhez hozzárendelünk egy bitet, amely jelzi a foglaltságot (1). (szabad 0) (Bonyolultabb a kezelés.) Szabad helyek láncolt listájának megvalósítása Mindezek kombinációi Új helyek kiosztása Az első szabad, megfelelő méretű A legjobban illeszkedő 23

Szabad helyek kezelése: Szétszórt ábrázolás Bitsorozatok (Itt a foglaltság mellett a tárhely címét is tárolni kell. Csak elvi lehetőség.) Szabad helyek láncolt listájának megvalósítása Egyirányban láncolt lista. (azonos méret) Ha nem == > első v. legjobban illeszkedő Valamely adatszerkezet bővít == > a lista elejéről adunk neki tárhelyet. Valamely adaszerkezet (fizikailag) töröl == > a lista elejére szúrjuk be a felszabaduló tárhelyet Szemét gyűjtögetés itt is automatikus, fizikai törlés esetén jellemzője a hivatkozás figyelés, azaz csak azt a tárhelyet gyűjti, melyre nincs élő hivatkozás 24