Informacje ogólne.
Lista - skończony ciąg elementów:
|
- |
lewy koniec listy |
|
- |
prawy koniec listy |
|
- |
długość (rozmiar) listy |
|
- |
lista pusta |
Przykładowe listy:
|
gdzie |
|
|
Podstawowymi abstrakcyjnymi operacjami na listach q i r są:
dostęp do elementu listy |
|
podlista |
|
złożenie |
|
Za pomocą tych trzech operacji można definiować inne operacje na listach, na przykład:
wstawienie elementu |
Listy używa się zwykle w specjalny sposób, ograniczając się do zmian jej końców:
1 |
front(q) |
= |
|
pobieranie lewego końca listy |
2 |
push(q,x) |
= |
|
wstawienie elementu |
3 |
pop(q) |
= |
|
usunięcie bieżącego lewego końca listy |
4 |
rear(q) |
= |
|
pobieranie prawego końca listy |
5 |
inject(q,x) |
= |
|
wstawienie elementu |
6 |
eject(q) |
= |
|
usunięcie bieżącego prawego końca listy |
Listę, na której można wykonać wszystkie sześć operacji, nazywa się kolejką podwójną.
W szczególnych przypadkach, tzn.
kiedy uwzględnia się tylko operacje front, push i pop, nazywa się ją stosem (bufor LIFO - Last In, First Out),
kiedy uwzględnia się tylko operacje front, pop, inject - kolejką (bufor FIFO First In, First Out).
|
front(q) |
push(q,x) |
pop(q) |
rear(q) |
inject(q,x) |
eject(q) |
Lista podwójna |
+ |
+ |
+ |
+ |
+ |
+ |
Stos (LIFO) |
+ |
+ |
+ |
|
|
|
Kolejka (FIFO) |
+ |
|
+ |
|
+ |
|
Reprezentacje listy.
Reprezentacje listy
to:
Tablicowa:
gdzie
Jak wskazuje nazwa, lista zaimplementowana w ten sposób opiera się na tablicy obiektów (lub rekordów) danego typu.
Dopisanie elementu |
Usunięcie elementu |
to wstawienie elementu do tablicy:
|
Jeżeli za indeks elementu przyjmiemy i-ty element tablicy jest to przesunięcie o jedno pole w lewo wszystkich elementów o indeksie większym od i. |
Zalety |
Wady |
|
|
Implementację tablicową stosuje się tam, gdzie elastyczność nie odgrywa istotnej roli, a wymagana jest szybka i prosta nawigacja.
Dowiązaniowa /wskaźnikowa:
W tej implementacji każdy obiekt na liście musi zawierać dodatkowy element: wskaźnik do innego obiektu tego typu.
Dopisanie elementu (dla prostej listy jednokierunkowej) |
Usunięcie elementu |
|
jest odwrotne do wstawiania: w pewnym miejscu zapisuje się wskaźnik do usuwanego elementu (aby nie "zgubić" jego adresu), następnie wskaźnik wiążący poprzednika przestawia się na następnik. Dopiero w tym momencie zwalnia się pamięć po obiekcie usuwanym (do tego potrzebny jest ten wskaźnik tymczasowy). |
Zalety |
Wady |
|
|
|
liniowa |
cykliczna |
Pojedyncza (jednokierunkowa) |
|
|
Podwójna (dwukierunkowa) |
|
|