Zásobník, fronta, seznam

Z FAV wiki
Přejít na: navigace, hledání

Všechny tyto ADT implementují IsEmpty (prázdná struktura) a Size (pošet prvků ve struktuře)


[editovat] Zásobník

Interface: operace Push, Pop, Peek

= LIFO pamět (Last In First Out)

Všechny operace jsou O(1)

Zasobnik.jpg

Head: vrchol zásobníku


Implementace objektově:


Implementace na poli:

[editovat] Fronta

Interface: operace Push, Pop, Front

= FIFO pamět (First In First Out)

Fronta.jpg

First: začátek fronty; Last: konec fronty


Implementace objektově:


Implementace na poli (cyklicky): Máme pole typu stejného jako data a indexy First a Last. Indexy neukazují přímo do pole, nýbrž je proveden přepočet (Index mod Delka pole) abychom využili celé pole. Tato fronta má omezenou délku.

Speciálním případem je například prioritní fronta, která řadí prvky ve frontě podle priority

[editovat] Seznam

Interface - Iterator nad seznamem: Add, Remove, Get; First, Next, IsLast, případně další (Previous, Last, IndexOf, ...)

Seznam.jpg

= struktura, do které je možné libovolně zapisovat a číst (na libovolné pozici)

Iterator: ukazatel do struktury

Implementace objektově - nástřel:

Zasovnik-fronta-seznam-objektove.jpg

Prvky ukazují na následující prvky seznamu. Iterátor je dobré implementovat tak, že ve skutečnosti ukazuje na předchozí prvek (Pokud tedy seznam není obousměrný, pak máme metodu Previous a je to jedno). Metoda add vloží prvek za prvek, na který ukazuje iterátor tak, že pouze upraví ukazatele prvků:

Remove je opačný proces, Get vrátí data (Tedy Iterator.Next.Data), První prvek seznamu si uložíme, abychom se mohli rychle vracet, stejně jako poslední prvek. Next provede Iterator.Next = Iterator.Next.Next. Kontrolujeme, zda nejsme mimo seznam.

Implementace na poli (nástřel): Pole má nevýhodu, že je nutné přesunout prvky doprava od iterétoru, pokud vkládáme prvky. Při mazání lze prvky posunout doleva, nebo do pole uložit hodnotu, která se zcela jistě nebude v poli nebude vyskytovat, nebo vytvořit stínové pole, ve kterém si smazané prvky označíme, a při posunu iterátoru je poté vynecháme. Tento přístup je dobrý pokud pole často upravujeme.


Osobní nástroje
Jmenné prostory
Varianty
Akce
Navigace
Nástroje