Egyirányban láncolt lista

24
1 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. 3:33:57

description

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. - PowerPoint PPT Presentation

Transcript of Egyirányban láncolt lista

Page 1: Egyirányban láncolt lista

1

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.3:42:22

Page 2: Egyirányban láncolt lista

2

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.

3:42:22

Page 3: Egyirányban láncolt lista

3

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:42:22

Page 4: Egyirányban láncolt lista

4

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án3:42:22

Page 5: Egyirányban láncolt lista

5

adat1 adatnadat2

Fej

TMP Uj adat ?

TMP

Uj adat

adat1 adatnadat2

Fej

TMP

Uj adat

1 & 23

4

3:42:22

Page 6: Egyirányban láncolt lista

6

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.3:42:22

Page 7: Egyirányban láncolt lista

7

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

cserélendő új értékkel felülírjuk.

3:42:22

Page 8: Egyirányban láncolt lista

8

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.)

3:42:22

Page 9: Egyirányban láncolt lista

9

Egyirányban láncolt lista: Feldolgozás A feldogozásnak minden esetben a keresés

vagy a bejárás az alapja.

3:42:22

Page 10: Egyirányban láncolt lista

10

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.)

3:42:22

Page 11: Egyirányban láncolt lista

11

adat1

adatn

adat2

Fej

Egyirányban láncolt lista:

Ciklikus lista:

adat1

adatn

adat2

Fej

3:42:22

Page 12: Egyirányban láncolt lista

12

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 megelőzőjét és rákövetkezőjét.

3:42:22

Page 13: Egyirányban láncolt lista

13

adat1

adatn

adat2

Fej

Egy irányban láncolt lista:

Két irányban láncolt lista:

adat1

adatn

adat2

Fej

Vége

3:42:22

Page 14: Egyirányban láncolt lista

14

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.

3:42:22

Page 15: Egyirányban láncolt lista

15

Multilista (1):

Betű

Szám

X 2

K 9

G 7

3:42:22

Page 16: Egyirányban láncolt lista

16

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.

3:42:22

Page 17: Egyirányban láncolt lista

17

Multilista (2):

Abc

Def

Qwe

4.érték

5.érték

DefDef

Def

Abc

Abc

Qwe

Abc

5.érték

Qwe

3:42:22

Page 18: Egyirányban láncolt lista

18

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

3:42:22

Page 19: Egyirányban láncolt lista

19

Multilista (3):

Fej

1 Adat1

1 Adat4

1 Adat2

1 Adat61 Adat3

0

0

0

1 Adat5

3:42:22

Page 20: Egyirányban láncolt lista

20

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.

3:42:22

Page 21: Egyirányban láncolt lista

21

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

3:42:22

Page 22: Egyirányban láncolt lista

22

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

3:42:22

Page 23: Egyirányban láncolt lista

23

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ő

3:42:22

Page 24: Egyirányban láncolt lista

24

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ás3:42:22