Fronta LIFO (Zásobník)
Z CHWiki
http://tutchek.igroup.cz/wiki/stack-ico.gif (angl. Stack)
Obsah |
[editovat] Popis
Zásobník je impelementací fronty typu LIFO (last in - first out). Nové prvky se přidávají vždy na vrchol. Ze zásobníku se odebírá vždy z vrcholu.
[editovat] Příklad použití
Úloha: Rozhodněte, zda je posloupnost závorek "({{{{((([[]])))}}}})" správně uzávorkovaná nebo ne. Řešení:
- Vezmeme první znak řetězce.
- Pokud je to otevírací závorka "([{", umístíme ji do zásobníku.
- Pokud je to zavírací závorka "}])", podíváme se do zásobníku, zda je na vrcholu odpovídající otevírací závorka. Pokud ano odebereme ze zásobníku otevírací závorku a pokračujeme. Pokud ne končíme s chybou "špatně uzávorkováno".
- Pokud nejsme na konci, vezmeme další znak řetězce a pokračujeme krokem 2.
- Pokud je zásobník není prázdný, končíme s chybou "špatně uzávorkováno".
- Řetězec je správně uzávorkovaný
[editovat] Složitost
- Push - vložení do zásobníku - O(1)
- Pop - vyjmutí ze zásobníku - O(1)
[editovat] Algoritmy
Zásobník je v poli P, index pro nově přidávaný prvek je v proměnné V. (P je indexováno od 0, výchozí hodnota V = 0)
[editovat] Push
Vkládáme prvek X
- P(V) = X
- V = V + 1
[editovat] Pop
Odebíráme vrchol
- Pokud V = 0, chyba "zásobník prázdný", skonči.
- Vrať P(V - 1)
- V = V - 1
[editovat] Implementace
Zásobník se dá s úspěchem implementovat v poli. Potřebujeme tedy pole P a proměnnou int vrchol, která označuje index pro přidání dalšího prvku.
