Végrehajtása a kétszeresen láncolt lista C

M s felsoroltak önmagukban láncolt lista, és jönnek a kedvezőtlen következtetéseket - a lista ésszerű használni, mint egy verem, mivel a betéteket az a lista tetején, és törli a listáról elején van összetettsége sorrendben 1 további manőverek lehet elérni beillesztését komplexitás, hogy a végén a rend 1. és hosszának meghatározására O (1), de végéről eltávolítjuk, és a behelyezendő tag olyan keresési O (n).







Hogyan egyszerűsítése eltávolítása az utolsó elem? Nyilvánvaló, hogy ha tárolunk egy mutatót a korábbi elem, lehetséges lenne, hogy távolítsa el az utóbbi.

Kétszeresen láncolt lista - egy adatstruktúrát, amely áll csomópontok, hogy tárolja a hasznos adatok rámutatnak a korábbi csomópont és a következő csomópontot.

szerkezete van szükség a megvalósításához egy listát csomópont

Üres struktúra típus DblLinkedList

DblLinkedList típusú szerkezet egyik eleme

Az első funkció az általában létrehozza egy példányát a szerkezet DblLinkedList

Nincs semmi érdekes. Ugyanakkor leírja a funkciót, amely törli a listát

Most meg egy sor standard funkciók - pushFront popFront és dolgozni a fej, és elutasítás popBack dolgozni az utolsó elem, getNth, helyezze és deleteNth behelyezni és eltávolítani egy tetszőleges helyre.

Kiegészíti egy új elemet a lista tetején

Helyezze be az első nagyon hasonlít a betétet a láncolt lista. Először létrehoz egy új elemet

Készítünk egy új elemet, és állítsa

Mivel ő volt az első, majd a következő mutató hivatkozásokat a régi lista élére, és nincs előző elemre. Most, ha a lista már a fej elem, annak előző mutatót kell utalnia az újonnan létrehozott elem

Most ellenőrizze a mutatót farkát. Ha üres, akkor hozzáadása után egy új elemet, nem vonatkozhat rá

Most perekinem fej mutató az újonnan létrehozott elem és növeli az értékét a mérő mérete

Dobott ukazazatel A lista élére az újonnan létrehozott elem

Eltávolítása a lista elején is eltérően jelentette a láncolt lista. Hozzáadott csak dobott további mutatókat, és ellenőrizze, hogy a mutató az utolsó elem, ha az elem már nem maradt lesz nulla.







Először hozzon létre egy mutatót az első eleme a listán. Azt meg kell változtatni, miután az összes mutató előző és a következő, tudtuk, hogy távolítsa el a csomópontot.

Létrehoztunk egy mutatót az első elem

Ezután perekinem fej mutatót a következő elem

Toss fej mutató a következő elemre

Ezután ellenőrizd, hogy a tétel nem törölhetetlen míg az utolsó (ha a lista csak az egyik eleme), majd felszabadítja a memóriát.

Létrehoztunk egy mutatót az első elem

Helyezze be a végén, és eltávolítjuk a végén egy nagyon hasonló - mi csak fordítsa meg a listában. Ennek megfelelően minden előző változás mellett, és fej-farok

Első az n-edik elem nagyon egyszerű, és nem különböznek ezek a láncolt lista.

Akkor ezt a jellemzőt: ha a lista hosszú, attól függően, hogy az index megtörténhet, akár az elejétől a végéig, vagy a végén a kezdet. Ez lehetővé teszi, hogy mindig a legfeljebb N / 2 lépésben.

Most akkor írj egy funkciót törölni, és helyezze egységet. Először is, nem találja a kívánt elemet, majd hozzon létre egy új csomópont (ha tészta), vagy egy mutatót a törölt elem. Akkor változik minden mutató.

Ne felejtsük el, persze, hogy keresse meg az értékeket a fej és a farok Quatnities, hogy pont a jelenleg aktív elemeket.

Adjunk hozzá egy pár kiegészítő funkciókat, amelyek segítenek a munkában. Első - ez egy listát nyomtatásban. Mivel a típusú érték - void *, szükséges, hogy elküldje a nyomtatási funkció egyik eleme.

A példákban fogjuk használni típusú változók int

A második funkció -, hogy hozzon létre egy listát a tömb

Most már használhatja a kétszeresen láncolt lista

R anee megnéztük a rendezési algoritmus egy egyirányú láncolt lista egyesítési módszerrel. Kétszeresen láncolt lista lehet válogatni ugyanúgy, így most nézzük a másik algoritmus - behelyezés sort. A lényege az algoritmus nagyon egyszerű -, hogy hozzon létre egy új kétirányú láncolt lista. Mi tesz neki egy rendezetlen lista első eleme. Beszúrni egy második elem menetben a rendezett lista, és keres egy helyet, hogy hová kell beilleszteni. Ha a helyszín is található, helyezze a végén. Nyilvánvaló, hogy ha az adattípus nem ismert, akkor át kell menni egy összehasonlító függvényt, amellyel meg lehet változtatni a sorrend.

Megvalósítani, szükségünk van még egy funkció -, hogy helyezze be a megadott elemet. Ez a funkció kap egy pointert a listán, egy mutatót a csomópontot, amellyel a beszúrni kívánt elemhez, és az új adatokat.

Most közvetlenül válogatás

Nyilvánvaló, hogy a végén a továbbított lista elemeit nem marad, mint mi őket tolta ki, hogy mi helyettesíti a régi lista az újonnan létrehozott.

A komplexitás a algoritmus - O (N 2), van egy járat egy rendezetlen lista összetettsége érdekében N, minden egyes eleme a rendezve át.

Mivel minden alkalommal, amikor egy új csomópont mi eltávolít egy csomópontot az első listát, annál több memóriára van szükség.

Most össze bonyolítja a különböző műveletek egyszerűen csatlakoztatható és kétszeresen láncolt lista. Egyirányú láncolt lista

A műveletek bonyolultságától A láncolt lista.




Kapcsolódó cikkek