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.