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
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
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
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
5
adat1 adatnadat2
Fej
TMP Uj adat ?
TMP
Uj adat
adat1 adatnadat2
Fej
TMP
Uj adat
1 & 23
4
3:42:22
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
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
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
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
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
11
adat1
adatn
adat2
Fej
Egyirányban láncolt lista:
Ciklikus lista:
adat1
adatn
adat2
Fej
3:42:22
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
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
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
15
Multilista (1):
Betű
Szám
X 2
K 9
G 7
3:42:22
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
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
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
19
Multilista (3):
Fej
1 Adat1
1 Adat4
1 Adat2
1 Adat61 Adat3
0
0
0
1 Adat5
3:42:22
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
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
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
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
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
Top Related