1 / 24

Egyirányban láncolt lista

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.

gizi
Download Presentation

Egyirányban láncolt lista

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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.

  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. Egyirányban láncolt lista: Létrehozás • A fejmutató létrehozása, és • feltöltése a NIL értékkel. Ezzel létrejött egy üres egyirányban láncolt lista.

  4. Egyirányban láncolt lista: Bővítés (az elején) • Tárhelyet foglalunk az új elem számára • A tárhely (új listaelem) adat részébe beírjuk a tárolandó elem értékét. • 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.) • 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

  5. Fej TMP TMP 1 & 2 3 Fej 4 TMP

  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: • Ha a lista üres (fejmutató==NIL), az algoritmus véget ért. • 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.

  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.

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

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

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

  11. Egyirányban láncolt lista: Fej Ciklikus lista: Fej

  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.

  13. Egy irányban láncolt lista: Fej Két irányban láncolt lista: Fej Vége

  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.

  15. Multilista (1): Betű Szám

  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.

  17. Multilista (2):

  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

  19. Multilista (3): Fej

  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.

  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

  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

  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ő

  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ás

More Related