Láncolt lánc

InfoC :: Dinamikus adatszerkezetek I. – Listák

Listák tömbös ábrázolása 6. Listák valamint — előre tekintve — a keresőfa pointeres megvalósításának gongylonema paraziták lehetőségét és előnyeit. A láncolt ábrázolással egy olyan dinamikus adatszerkezetet hozhatunk létre, amelyben az egyes rekordoktól a láncolt lánc pointerek vezetnek. Lineáris adattípusok esetén erre a pointeres reprezentációra gyakran azt mondjuk, hogy ez a láncolt ábrázolás vagy a listával történő megvalósítás.

A „lista” kifejezés a szakmai szóhasználatban kettős jelentésű; vonatkozhat a láncolt ábrázolásra, de utalhat egy önálló adattípusra is, ha értelmezzük a műveleteit. Ebben a fejezetben főként az utóbbi értelemben beszélünk a listákról. A listák absztrakciós szintjei A lista egy önálló adattípus, amelyhez hozzá tartoznak saját műveletei. A listát, a többi típushoz hasonlóan lehet az absztrakt adattípus ADT szintjén is definiálni, ettől azonban most eltekintünk. Az absztrakt lista adatszerkezet ADS bevezetésének sincs láncolt lánc, de nem okoz hiányt a tárgyalásban, ha ezt a szintet — az egyetlen erre utaló 6.

A kép nagyobb változata külön ablakban is megtekinthető. A lista absztrakt adatszerkezet ADS A reprezentáció szintjén két alapvető ábrázolási módot alkalmazunk ezúttal is: a pointeres és a tömbös megvalósítást.

Ha megkülönböztetjük a — reprezentáció eszközeként használt — lista adatszerkezet és a — saját műveletekkel rendelkező — lista adattípust, akkor felvetődik a következő kérdés: beszélhetünk-e a lista típus láncolt ábrázolásáról, illetve lehet-e láncolt lánc listákat tömbösen ábrázolni?

A válasz mindkét kérdésre „igen”, azzal a megjegyzéssel, hogy az alkalmazások döntő többségében láncoltan megvalósított listákkal találkozunk.

Láncolt ábrázolás, listák

A listák láncolt ábrázolása annyira természetes, hogy ezt a reprezentációt nem is tünteti fel külön cím, hanem majd csak a listák tömbös ábrázolását, ami viszonylag ritka megoldás. Az itt következő tárgyalásban láncolt lánc megismerjük a listák lehetséges fajtáit, amelyeket esetünkben három tényező fejelem, láncolás irányai, ciklikusság alapján alakítunk ki.

Az egyik tipikus listafajtára megadjuk a láncolt lánc.

  • Láncolt lista – Wikipédia
  • Láncolt ábrázolás
  • InfoC :: Dinamikus adatszerkezetek I. – Listák
  • Férgesség tünetei
  • Algoritmusok és adatszerkezetek / Listák (7. lecke)

Látni fogjuk, hogy itt már az egymáshoz is illeszkedő műveletek összehangolt rendszerére van szükség. A listákat gyakran alkalmazzuk feladatok megoldásában.

Dinamikus adatszerkezetek I. – Listák

A listák tartalmával kapcsolatos tevékenységeket összeállíthatjuk a típusműveletekből, illetve megvalósíthatjuk alacsonyabb szintű listakezeléssel, amelyben kívülről „látjuk” a pointereket, és segítségükkel magunk kezeljük az listán történő lépkedést, az elemek tartalmának elérését. Ha a lista műveleteit használjuk, akkor a pointereihez közvetlenül nem férhetünk hozzá, csak a műveleteken keresztül tudjuk elérni az elemeket.

féreg jak vivet tovább

Az algoritmikus szempontból egyszerűbb feladatok megoldásban járhatunk el így, vagyis a lista-műveletek alkalmazásával. A feladatok megoldásban gyakrabban találkozunk láncolt láncolt lánc közvetlen listakezeléssel. Példaként egy lista helyben történő megfordítását látjuk majd. Utalhatunk a beszúró rendezés listás változatára is lásd: A listákat lehet tömbösen is ábrázolni, ahol a rákövetkező elemhez nem egy pointer, hanem egy index érték vezet.

A megvalósítás tömbös eszközéhez folyamodunk például egy olyan programnyelv esetén, amely nem tartalmazza pointer nyelvi elemét. Vissza a tartalomjegyzékhez 6.

láncolt lánc

A listák fajtái A lista adattípust az ábrázolás szintjén ismertetjük. A fejezet nagyobb részében a láncolt megvalósítást részletezzük. Először a szerkezeti lehetőségeket vesszük sorra, utána bevezetjük a lista műveleteit. A lista leggyakoribb megvalósításában a rekordok közötti kapcsolatot pointerek biztosítják.

Ahhoz, hogy a lista első elemét is elérjük, egy arra mutató pointerre láncolt lánc szükségünk van. Ezt vagy egy közvetlen mutató biztosítja, vagy a listát kiegészítjük egy fizikai első elemmel, a fejelemmel, amelynek pointere mutat a logikailag első listaelemre.

A listát azonosító önálló pointer ebben az esetben a fejelemre mutat. Egy lista ebből a szempontból lehet fejelem nélküli, vagy fejelemes.

láncolt lánc

A pointerek láncán végighaladva sorban érhetjük el a lista elemeit, az elsőtől az utolsóig. Ha nem kell a memóriával erősen takarékoskodnunk, akkor kiegészíthetjük a listaelemeket visszafelé irányuló, a megelőző elemre mutató pointerekkel. A lista láncolása ennek giardiasis gatos sintomas lehet egyirányú, vagy kétirányú.

A lista utolsó elemének előre mutató pointere szokás szerint NIL, mivel a rákövetkező elemek sora nem folytatódik tovább.

Fejelemes egyirányú lista rendezése beszúró rendezéssel Gyakorló feladatok FEJ egy egyirányú, fejelemes listára mutat. A lista elemei egész láncolt lánc, rendezetlen sorrendben, esetleg lehet üres is. Készítsen algoritmust, mely egyszer végigmegy a lista elemein, és törli azokat az elemeket, melyek nem nagyobbak, mint a listában előttük szereplő elem. Így az eredmény egy szigorúan monoton növekvő lista lesz. A lista egész számokból álló halmazt ábrázol, az elemek sorrendje rendezetlen.

A bejárást még rugalmasabbá teszi az, ha az utolsó elem pointere visszamutat az első elemre. Az ilyen listát nevezzük ciklikusnak, míg az eredetit nem-ciklikusnak ha hangsúlyozni szeretnénk a ciklikusság hiányát.

A felsorolt három tényező mindegyike két-két lehetőséget kínál. Ezeket tetszőlegesen össze lehet párosítani, így nyolc lista fajtához jutunk. Ezek közül jobbára a következő hármat használják: az egyszerű listának nevezett valóban legegyszerűbb szerkezetet, amely nem tartalmaz fejelemet, egyirányú és nem ciklikus; a fejelemes egyszerű listát, amely annyiban különbözik láncolt lánc előzőtől, hogy tartalmaz fejelemet; a legtöbb lehetőséget támogató listát, amely tartalmaz fejelemet, kétirányú láncolás köti össze elemeit és ciklikus.

A felsorolt listafajtákat a 6. A listák néhány fajtája A fejelemes, kétirányú, ciklikus lista esetén meg kell fontolni annak a két mutatónak az irányítását, amelyek a ciklikusságot láncolt lánc. A fejelem visszafelé mutató pointere természetes módon az utolsó listaelemre mutat.

Algoritmusok és adatszerkezetek / Listák

Az utolsó elem előre irányuló pointerét irányítsuk a fejelemre. Irányíthatnánk az első elemre is, de célszerűbb, ha az utolsó elemtől a fejelemhez vezet az út. Két érv, ami emellett szól: a szimmetria, ami a többi közvetlen „oda-vissza” pointeres kapcsolatban lévő elempár között fennáll; valamint az, hogy így könnyebb ellenőrizni, hogy a lista végére értünk.

Listák műveletei Kiválasztunk egy listafajtát, és megadjuk rá a listaműveleteket, pontosabban a műveletek egy lehetséges halmazát, hiszen több megoldás is lehetséges. Általában, a listaműveletek témakörében erős sokféleség uralkodik, ami nem zavaró. Az alábbi tárgyalásban néhol — zárójelben — rámutatunk az alternatív lehetőségekre.

A műveleteknek egy ilyen halmaza már átgondolt tervezést kíván. A műveleteknek ugyanis illeszkedniük láncolt lánc egymáshoz, valamint egységes arculatot is kell mutatniuk.

Legyen az egyszerű fejelemes lista az, amelynek megadjuk a műveleteit. A műveletek bevezetésének az alapja az, hogy értelmezzük a lista aktuális elemét, amelyet az akt pointer azonosítja. A műveletek legtöbbje az aktuális elemre vonatkozik. A műveletek általában módosítják is azt, hogy melyik elem lesz ezután az aktuális.

Milyen hosszú legyen a lánc? - Kerékpár lánc hossza és felrakása

Az akt pointer lehetséges értékeit a következőképpen határozzuk meg: mutathat a lista elemeire; nem mutathat azonban a fejelemre, viszont „leléphet” az utolsó elemről és ekkor NIL az értéke. Az utóbbi két esetben ellenkezőleg is dönthettünk volna. A műveletek egy részének a végrehajtása hibához vezet, így szükségessé válik a hibakezelés. Ez megoldható például egy hibaváltozó logikai értékének a beállításával.

Ekkor bevezethetünk egy olyan műveletet, amely a hibaállapotot kérdezi le, és hiba esetén törli ezt a státuszt.

  1. Folyékony parazita orvosság
  2. Bélféreg rendeles

A lista adattípus részeként bevezethetők további változók is, pl. Olyan megoldást is lehet látni, amelyben az akt pointer fizikailag az aktuális elem előtti elemre mutat.

Nem foglalkozunk a nyelvi implementáció kérdésével. Szemléletünk az osztály és láncolt lánc objektum fogalmai felé mutat.

Gyakorlati példa - Láncolt lista

Az alábbi leírásokban az l pointer a lista fejelemére mutat, a listaelemek adatrészét adat, a pointer mezőt mut azonosítja. A teljes lista adatstruktúra részét képező láncolt lánc és hiba változókra közvetlenül hivatkozunk, és ezek nem szerepelnek az eljárások paraméterei között; a listát csak l azonosítja. Ha egy művelet a lista egy elemének az adatrészével végez műveletet, akkor az eljárás input vagy output paramétere lesz a megfelelő rekordtípusú változó.

Az adatmozgatás nem return utasítással és nem pointeres hozzáférés biztosításával történik, hanem a paraméter-átadás segítségével. Összességében az alábbi tizenkét műveletet vezetjük be.

Üres l. Üres lista létrehozása; egyúttal az üres lista-konstans neve.

Navigációs menü

A létrehozott fejelem pointere NIL, vagyis maga a lista üres, nem tartalmaz rekordot. Üres-e l. Annak lekérdezése, hogy a lista üres-e. A logikai függvény az ennek megfelelő logikai értékkel tér vissza.

láncolt lánc széles spektrumú helmint készítmények

Hiba-e l. Történt-e hiba az utolsó hiba-lekérdezés óta? A logikai függvény visszaadja a hiba-változó értékét, egyúttal törli a hiba-státuszt. Ebben a szemléletben a műveletek felhasználójának kell rákérdeznie a hibára. Elsőre l. A lista első eleme lesz az aktuális elem. Üres lista esetén hibajelzést vált ki ez a művelet.

Változatok[ szerkesztés ] Egyszeresen láncolt lista[ szerkesztés ] A láncolt láncolt lánc legegyszerűbb formája az egyszeresen láncolt lista, amelyben cellánként egy hivatkozás található. Ez a hivatkozás a lista következő elemére mutat, speciálisan az utolsó elem esetén nullértékű vagy egy kitüntetett üres listára hivatkozik. Egy három egész elemből álló egyszeresen láncolt lista Ha egy egyszeresen láncolt listára akarunk hivatkozni például paraméterátadáskorelegendő megadnunk az első elemének címét. Kétszeresen láncolt lista[ szerkesztés ] Valamivel elmésebb adatszerkezet a kétszeresen láncolt lista.

Következőre l. A lista következő eleme lesz az aktuális. Üres lista, vagy nem definiált aktuális esetén: hibajelzés. Ha az utolsó listaelem az aktuális, akkor a művelet hatására „lelép” erről az aktuális elem mutatója és értéke NIL lesz nem számít hibának.

Utolsó-e l. Annak lekérdezése, hogy a lista utolsó eleme-e az aktuális? Üres lista, vagy nem definiált aktuális elem esetén hibajelzést kapunk. Vége-e l. Annak lekérdezése, hogy az aktuális pointer „lelépett-e” a listáról? EOF-jellegű állapot. Üres listára is teljesül definíció szerinthogy a végén vagyunk. Láncolt lánc l,x. Hozzáférés az aktuális elem tartalmához.

láncolt lánc

A művelet üres lista, vagy nem definiált aktuális elem esetén hibajelzést vált ki. AktMod l,d. Az aktuális elem adat-tartalmának felülírása. Üres lista, vagy nem definiált aktuális elem esetén a művelet hibajelzést vált ki. BeszúrElsőnek l,d. Rekord beszúrása első elemként a listába. Üres vagy bika lánc fejlődési mintázat lista esetén egyaránt működik.

Tartalomjegyzék

A beszúrt első elem lesz az aktuális. BeszúrUtán l,d. Rekord beszúrása az aktuális elem után. Üres lista, vagy nem definiált aktuális elem esetén ez a művelet hibajelzéshez vezet. Sikeres végrehajtás esetén a beszúrt rekord lesz a lista aktuális eleme.

Töröl l, x. A lista aktuális elemének törlése. Üres lista, vagy nem definiált aktuális elem esetén a művelet hibajelzést ad. Sikeres végrehajtás esetén a törölt elem utáni elem lesz az aktuális.

A törölt rekord adattartalmát visszaadja az eljárás e nélkül előbb az aktuális elem értékének lekérdezését kellene szükség esetén végrehajtani.

Láncolt lista

Az egyszerű fejelemes listára specifikált láncolt lánc egy kivételével konstans időben végrehajthatók, függetlenül a lista méretétől.

A kivételt az aktuális elem törlése jelenti, ugyanis a fejelemtől indulva, a pointerek láncán el kell jutni az aktuális elemet megelőző elemhez, mivel annak pointerét módosítani kell: ugyanaz az érték kerül oda, mint ami a törlendő aktuális elem pointer-mezőjében található.

Formálisan kifejezve: illetve ahol op az egyszerű fejelemes lista bármely más az aktuális elem törlésétől különböző műveletét jelöli. A törlés lineáris műveletigénye — és számos feladat — vezetett arra a gyakorlatra, hogy ma már jobbára a legösszetettebb láncolt lánc fajtát alkalmazzák. Mivel a memóriával józan keretek között lényegében nem kell takarékoskodni, egy visszafelé mutató pointer bevezetése a rekordokba nem okoz észrevehető terhet.

Lehet, hogy érdekel