A láncolt lista - studopediya

Egy adatstruktúrában egy véges rendezett halmaza (csomópontok) kapcsolódnak egymáshoz által mutató, úgynevezett láncolt lista. Minden egyes elem egy láncolt lista tartalmaz egy adatmezőt, és egy mutatót (link) a következő és / vagy előző elem. Ez a szerkezet lehetővé teszi, hogy hatékonyan végrehajtani a műveletet a hozzáadása és eltávolítása a tételeket, bármilyen helyzetben a sorrendben. És ez nem igényel az átszervezés a szerkezet, amely szükséges lenne a tömbben. A hátránya a láncolt lista, valamint egyéb építmények, mint például a „listán”, szemben a tömb a hiánya képes dolgozni az adatok véletlenszerű hozzáférési módot, vagyis a lista - .. Egymást elérheti szerkezetét, míg a tömb - önkényes. Az utolsó hátránya csökkenti a hatékonyságát bizonyos műveleteket.

Minden egyes csomópont egyszerűen csatlakoztatva (egyirányú csatlakoztatva) a lista tartalmaz egy mutatót a következő csomópontot (ábra. 2.7). Egyetlen pont csak akkor kap a következő pont, így közelítve a végére. Így kapunk egyfajta áram az egyik irányba.

2.7 ábra - egyszeresen láncolt lista

Megismételni korábbi mondta. A kép minden egyes blokk képviseli az elem (csomópont) listán. Head lista - egy lista a fejléc elem (feltételezve, hogy a következő mezőbe neki). Nem tartalmaz adatokat, de csak egy hivatkozás a következő elem. A jelenléte adatokkal területén info. és linkek - következő mezőben (további hivatkozásokkal lesz felelős, és előző mező). A jel hiánya a mutató nulla területen.

Egyszeresen láncolt lista nem a legkényelmesebb típusát láncolt lista, azaz a. A. Az egyik pont csak akkor érhető el a következő pontot, így közelítve a végére. Ha csak a mutatót a következő elem egy mutató az előző, akkor ez a lista nevű kétszeresen kapcsolódik.

2.8 ábra - kétszeresen láncolt lista

A képesség, hogy mozogni előre és hátra hasznos bizonyos műveleteket, de a további jelek használatát igénylő több memóriát, mint ami szükséges a kapcsolt listában.

Amikor a memória mennyiségét bármilyen okból korlátozott, akkor az alternatív, hogy a kétszeresen láncolt lista szolgálhat az XOR-láncolt lista (ábra. 2.9). Az utóbbi használja a logikai műveletet XOR (kizáró „vagy” szigorú szétválasztás), amely a két változó értéke true, ha ez igaz, csak az egyikük, és a második, illetve hamis. Az igazság táblázat műveleteket:

2.9 ábra - XOR-láncolt lista

Egy másik típusú láncolt lista - a lista a gyűrű. A kör alakú láncolt lista az utolsó elem utal az első. Abban az esetben, egy kétszeresen összekapcsolt cirkuláris listán, valamint az első elem utal az utóbbi (ábra. 2.10). Így egy szerkezetet fixated.

2.10 ábra - Ring láncolt lista

Tekintsük az alapműveleteket kapcsolt listák.

A kétszeresen láncolt lista Például, mi magyarázza a működési elve az adatok szerkezetét. Végrehajtásakor a listát hasznos szerkezetek (Pascal - felvétel).

Az általános formája a csomópont leírása kétirányú láncolt lista, és egy mutatót az első eleme a lista:

információs mező értéke 1;

információs mező 2;

információs mező N;

egy mutatót a következő elemre;

mutató az előző elem;

struct DoubleList // node lista leírása

int adatok // információs mező

DoubleList mellett *; // mutató a következő elemre

DoubleList * dok; // mutató az előző elem

DoubleList * fej // mutató az első elemre a lista

Nos, feltételezve, hogy a leírt összeszerelés és a mutatót a fejét a listán (lásd. A fenti példában), tudjuk írni a lehetőségek listáját.

void AddList (int értéket, int pozíció)

DoubleList * node = new DoubleList; // Létrehozunk egy új bejegyzést

nyirokcsomó> adatok = érték; // hozzárendelése elem értékeit

if (fej == NULL) // ha a lista üres

nyirokcsomó> következő = csomópont; // állítsa a következő mutató

nyirokcsomó> Prev = csomópont; // állítsa előző mutató

fej = csomópont; // A lista élére kerül meghatározásra

A (int i = helyzetben; i> 1; én--) p = p-> következő;

nyirokcsomó> következő = p; // hozzáad egy elem

cout<<"\nЭлемент добавлен. \n\n";

int DeleteList (int pozíció)

if (fej == fej-> következő) // ha ez az utolsó tétel a listán

törölni fej // elem törléséhez

A (int i = helyzetben; i> 1; én--) a = a-> következő;

ha (a == fej) fej = a-> következő;

a-> prev-> következő = a-> következő; // elem törléséhez

cout<<"\nЭлемент удален. \n\n";

Ha a lista üres, akkor az üzenet tájékoztatja erről, és akkor a függvény a hívónak.

PrintList funkció megjeleníti az összes elemet a lista:

ha (fej == NULL) cout<<"Список пуст\n";

cout<<"\nЭлементы списка: ";

A lista nyomtatásához és ezen keresztül a ciklus, vagyis iteratív. Most egyesíti a három funkció egy programban, és írjon a fő funkciója, felelős hívó alprogram:

struct DoubleList // node lista leírása

int adatok // információs mező

DoubleList mellett *; // mutató a következő elemre

DoubleList * dok; // mutató az előző elem

DoubleList * fej // mutató az első elemre a lista

void AddList (int értéket, int helyzetben) // Elem hozzáadása

DoubleList * node = new DoubleList; // Létrehozunk egy új bejegyzést

nyirokcsomó> adatok = érték; // hozzárendelése elem értékeit

if (fej == NULL) // ha a lista üres

nyirokcsomó> következő = csomópont; // állítsa a következő mutató

nyirokcsomó> Prev = csomópont; // állítsa előző mutató

fej = csomópont; // A lista élére kerül meghatározásra

A (int i = helyzetben; i> 1; én--) p = p-> következő;

nyirokcsomó> következő = p; // hozzáad egy elem

cout<<"\nЭлемент добавлен. \n\n";

int DeleteList (int pozíció) // eitávoiítóeiem

if (fej == fej-> következő) // ha ez az utolsó tétel a listán

törölni fej // elem törléséhez

A (int i = helyzetben; i> 1; én--) a = a-> következő;

ha (a == fej) fej = a-> következő;

a-> prev-> következő = a-> következő; // elem törléséhez

cout<<"\nЭлемент удален. \n\n";

érvényteleníti PrintList () // listájának megnyitása

ha (fej == NULL) cout<<"Список пуст\n";

Kapcsolódó cikkek