Lista powiązana w C++

Co to jest lista powiązana?

Jest to dynamiczna struktura danych. Składa się z elementów tego samego typu, które oprócz swoich danych posiadają wskaźnik do następnego elementu listy. W ten sposób mozemy przebiegać całą listę od początku do końca.

Czemu lista, a nie tablica?

Ktoś pewnie zapyta. Odpowiedź jest prosta. Tablica to w dużej ilości przypadków marnotrawienie pamięci. Powiedzmy, że piszemy bazę danych książek (przechowywaną w pamięci RAM). Jeśli mielibyśmy korzystać z tablicy, to już na początku musimy zadeklarować odpowiedni rozmiar tablicy, tak aby mógła pomieścić wszytskie możliwe książki. Lista daje nam tę wygode, że początkowo nie zajmuje prawie żadnej pamięci. Gdy dodajemy nową książkę to tworzymy po prostu nowy element listy i tylko dla niego alokujemy pamięć.

Dzięki temu lista może nie zawierać żadnych elementów, może zawierać zarówno 10 jak i 10 tysięcy elementów, a zajmowana pamięć jest wprost proporcjonalna do ilości przechowywanych elementów.

Różne typy list powiązanych

 

 

Prosta lista w C++

Teraz spróbujemy napisać implementację prostej listy jednokierunkowej w C++. Lista taka może być podstawą dla bardziej użytecznych dynamicznych struktur danych, jak np. kolejka, stos, czy dynamiczna tablica.

Załóżmy, że elementy naszej listy maja przechowywać wartość typu int. (Jest to dość abstrakcyjny przypadek, gdyż listy zazwyczaj przechowują elementy składające się z bardziej rozbudowanych typów).

Najpierw zdefiniujemy element listy:

struct SElement
{
 int Value;
 SElement* Next;
};

Następnie będzie nam potrzebna zmienna - wskaźnik do pierwszego elementu listy:

SElement* First;

i do ostatniego elementu (dla wygody - nie jest niezbędna):

SElement* Last;

Nastpnie zmienna - rozmiar listy:

int Size = 0;    // liczba elemntów na liscie

Następnie należy zdefiniować podstawowe funkcje do obsługi listy:

void Put (int NValue, int Pos);    //Dokłada element do listy
void Get (int Pos);        //Zabiera i zwraca element z listy

 

Najlepiej jest zebrać wszystkie zmienne i funkcje w jedną klasę np. o nazwie CList.

Jeśli ktoś ma pytania co do szczegółowej implementacji listy to proszę o e-maile.(adres na końcu)

Wzorzec - Dynamiczna tablica TArray

Poniżej mozna sobie ściągnąć dobra implementację (kod źródłowy) wzorca dynamicznej tablicy z wykorzytsaniem listy jednokierunkowej.

Jest to tablica dowolnego (jednego) typu, którą deklaruje się następująco:

#include<tarray.cpp>
...
TArray<float> Tablica;

A interfejs klast TArray wygląda tak:

template<class T>
class TArray
{
...
public:
 TArray();
 ~TArray();

void Add(T NItem);
void Insert(T NItem, unsigned Pos);
T Remove(unsigned Pos);
void Clear();
unsigned GetSize();

T& operator[](unsigned Pos);

class EOutOfMemory {};
class EOutOfRange {};
};

Z doświadczenia wiem, że taka klasa może przydać się w praktycznym pisaniu programów.

Autor

Autor: Mr Bin
Data: 26.12.2000
E-mail: delfisajt@poczta.onet.pl
WWW : www.delfisajt.republika.pl

 

 Copyright © 2000 SYSTEM. Wszystkie prawa zastrzeżone.
 Kopiowanie tekstów w całości lub we fragmentach bez zgody redakcji i autorów zabronione.