Ruby Linked List

ehhez a gyakorlathoz egy egyszeresen Linkelt lista egyszerű változatát valósítjuk meg. De először nézzük meg, mi a Linkelt lista, és miért kell törődnie.

Linkelt lista a gyors és memória hatékony beillesztésekhez és törlésekhez használt adatszerkezet. A tömböktől eltérően, amelyek egyetlen objektumok, a csatolt listák több ‘csomópont’ objektumot tartalmaznak, amelyek hivatkozásokon keresztül kapcsolódnak egymáshoz.

a kapcsolt listák egyenként vagy kétszeresen is összekapcsolhatók. Most az egyenként összekapcsolt listákra összpontosítunk.

Singly Linked List

ha a linkelt listák több objektum összekapcsolása, ideális esetben szükségünk van egy pár különböző objektumra.

  1. LinkedList objektum, amely a lista összes objektumát tartalmazza

  2. a csomópont objektum, amely tartalmazza az adatokat az elem, valamint a hivatkozás a következő csomópont a listában.

várj, miért nem használ tömbök helyett?

alacsonyabb szintű nyelvekben a tömbök blokkokban vannak allocatd. Ezért a tömbök statikus méretűek, és csak egy adott adattípust tudnak tárolni. A csatolt listák adatokat tárolnak a kupacban, ami azt jelenti, hogy az adatok nem szervezett módon tárolhatók. Mivel minden csomópont a következőre mutat, továbbra is lehetséges a listaszerkezet fenntartása.

első lépések

a legjobb módja annak, hogy megértsük, hogyan kapcsolódik listák munka, hogy egy! Tegyük ezt Ruby – ban. Itt van a folyamat.

  1. Kezdje egy Node osztály létrehozásával. Lesznek attribútumaink az adatok ábrázolására (hívjuk ezt @data – nek) és a következő csomópontra való hivatkozásra (hívjuk ezt @next – nak).

  2. hozzon létre egy LinkedList osztályt. Ennek az osztálynak két értéke lesz: @headés @tail. Ezek jelentik a lista elejét és végét. Inicializálja mindkettőt nil – re. Van egy üres listánk!

  3. most a két osztály összekapcsolására. Hozzon létre egy módszert a LinkedList osztályban, amelynek neve insert_front. A kihívás egy elem hozzáadása a lista elejéhez. Ezt egy új Node létrehozásával lehet megtenni, majd a következőket kell tennie:

  4. tárolja a @head értéket egy temp változóba

  5. állítsa a @head értéket az újonnan létrehozott Nodeértékre. Vegye figyelembe, hogy jelenleg nexthivatkozása nil.

  6. gondoljon arra, hogy mit kellene tennünk, ha új elemet adunk hozzá a csatolt lista elejéhez. Tekintse meg a diagramot (tipp: tennünk kell valamit az új csomópont next referenciájával)

  7. végül kezelje a @tail speciális esetét. A @tail mindig az utolsó Node legyen a linkelt listában.

  8. hozzon létre egy másik módszert a LinkedList vagy Node néven to_s a lista kinyomtatásához a konzolra.

a linkelt listák felett történő iterálás

a while loops használatával a linkelt listák felett iterálhat. Míg a hurkok jobbak, mint a hurkok itt, mert a csatolt listák nem rendelkeznek hossz tulajdonsággal. A for bizonyos számú iteráció helyett egyszerűen a while iteráció helyett a current mutatónk nem nil.

hozzon létre egy current nevű helyi változót, amely a lista gyökércsomópontjára mutat. A hurok belsejében két dolgot tehet:

  1. nyissa meg az aktuális csomópont értékét current.data

  2. mutasson az aktuális változóra a következő elemrecurrent = current.next

bónusz: hozzon létre egy insert_end módszert csomópontok hozzáadásához a lista végéhez.

SUPER BONUS: hozzon létre egy sokoldalúbb insert módszert egy csomópont hozzáadásához bárhol a csatolt listában, amely indexet biztosít az új elemhez.

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

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