GeeksforGeeks

jún 14, 2021
admin

A tömbök az elemeket összefüggő memóriahelyeken tárolják, ami könnyen kiszámítható címeket eredményez a tárolt elemek számára, és ez gyorsabb hozzáférést tesz lehetővé egy adott indexen lévő elemhez. A kapcsolt listák tárolási struktúrája kevésbé merev, és az elemek általában nem egybefüggő helyeken tárolódnak, ezért további címkékkel kell tárolni őket, amelyek a következő elemre való hivatkozást adják meg. Az adattárolási séma e különbsége dönti el, hogy egy adott helyzetben melyik adatszerkezet a megfelelőbb.

A tömb adattárolási sémája

A kapcsolt lista adattárolási sémája

A főbb különbségeket az alábbiakban soroljuk fel: Mivel egy tömbben az adatok csak összefüggő memóriablokkokban tárolhatók, a méretük nem változtatható futásidőben a más adatok felülírásának veszélye miatt. Egy összekapcsolt listában azonban minden csomópont a következőre mutat, így az adatok szétszórt (nem összefüggő) címeken is létezhetnek; ez lehetővé teszi a dinamikus méretet, amely futásidőben változhat.

  • Memóriaelosztás:
  • Memóriahatékonyság: Az összekapcsolt listák azonos elemszám esetén több memóriát használnak, mivel az adatokkal együtt a következő csomópontra való hivatkozás is tárolásra kerül. A kapcsolt listák méretbeli rugalmassága miatt azonban összességében kevesebb memóriát használhatnak; ez akkor hasznos, ha bizonytalan a méret vagy az adatelemek mérete nagymértékben változik; tömbök használata esetén a méret felső határának megfelelő memóriát kell allokálni (még akkor is, ha nem használjuk fel az egészet), míg a kapcsolt listák az adatmennyiséggel arányosan, lépésről lépésre növelhetik méretüket.
  • Futtatási idő: Egy tömb bármely eleme közvetlenül elérhető az indexével; egy összekapcsolt lista esetében azonban az összes előző elemet végig kell járni, hogy elérjük bármelyik elemet. Emellett a tömbökben a jobb cache lokalitás (az összefüggő memória kiosztása miatt) jelentősen javíthatja a teljesítményt. Ennek eredményeképpen egyes műveletek (például egy adott elem módosítása) gyorsabbak a tömbökben, míg más műveletek (például egy elem beillesztése/törlése az adatokba) gyorsabbak az összekapcsolt listákban.
  • A következőkben a kapcsolt listák mellett szólnak a szempontok.
    (1) A tömbök mérete fix: Tehát előre tudnunk kell az elemek számának felső határát. Emellett általában a kiosztott memória a felhasználástól függetlenül megegyezik a felső határral, és a gyakorlati felhasználás során a felső határt ritkán érjük el.

    (2) Egy új elem beillesztése egy elemtömbbe drága, mert helyet kell teremteni az új elemeknek, és a hely megteremtéséhez a meglévő elemeket el kell tolni.

    Tegyük fel például, hogy egy id tömbben az azonosítók rendezett listáját tartjuk fenn.

    id = .

    És ha be akarunk illeszteni egy új, 1005-ös azonosítót, akkor a rendezett sorrend fenntartásához az 1000 utáni összes elemet (kivéve az 1000-et) át kell helyeznünk.

    A törlés szintén drága a tömbökkel, amíg nem használunk valamilyen speciális technikát. Például, ha törölni akarjuk az id-ben az 1010-et, akkor mindent, ami 1010 után van, el kell mozgatni.

    A kapcsolt lista tehát a következő két előnyt nyújtja a tömbökkel szemben
    1) Dinamikus méret
    2) Könnyű beszúrás/törlés

    A kapcsolt listáknak a következő hátrányai vannak:
    1) A véletlenszerű hozzáférés nem megengedett. Az elemekhez az első csomóponttól kezdve szekvenciálisan kell hozzáférnünk. Tehát nem tudunk bináris keresést végezni összekapcsolt listákkal.
    2) A lista minden egyes eleméhez extra memóriaterületre van szükség egy mutató számára.
    3) A tömbök jobb cache lokalitással rendelkeznek, ami elég nagy különbséget jelenthet a teljesítményben.

    Vélemény, hozzászólás?

    Az e-mail-címet nem tesszük közzé.