Obsah

Zásobník (Stack)

Zásobník (anglicky Stack) je abstraktní datová struktura, která slouží k ukládání prvků v lineárním uspořádání. Je fundamentální součástí informatiky a funguje na principu LIFO (Last In, First Out), což v překladu znamená „poslední dovnitř, první ven“.

Tuto strukturu si lze představit jako tos talířů v jídelně:

Klíčové vlastnosti

Hlavní operace

Každá implementace zásobníku musí podporovat následující základní operace:

Operace Název Popis
Vložení ``push()`` Přidá nový prvek na vrchol zásobníku.
Odebrání ``pop()`` Odebere prvek z vrcholu zásobníku a vrátí jeho hodnotu.
Náhled ``peek()`` nebo ``top()`` Vrátí hodnotu prvku na vrcholu, ale neodebere jej.
Je prázdný? ``isEmpty()`` Vrátí true, pokud v zásobníku nejsou žádné prvky.
Velikost ``size()`` Vrátí aktuální počet prvků (volitelné).

Implementace zásobníku

V programování lze zásobník implementovat dvěma hlavními způsoby:

1. Pomocí pole (Array)

Jedná se o statickou implementaci.

2. Pomocí spojového seznamu (Linked List)

Jedná se o dynamickou implementaci.

Příklad implementace (Pseudokód)

class Stack {
    pole data[100];
    int top = -1; // Ukazatel na vrchol (prázdný zásobník)
 
    void push(x) {
        top++;
        data[top] = x;
    }
 
    int pop() {
        if (top == -1) return error;
        hodnota = data[top];
        top--;
        return hodnota;
    }
}

Využití zásobníku v praxi

Zásobník je jednou z nejpoužívanějších struktur, často i tam, kde to uživatel nevidí.

1. Zásobník volání (Call Stack)

Pravděpodobně nejdůležitější využití. Když program zavolá funkci:

  1. 1. Adresa návratu a lokální proměnné jsou uloženy na zásobník (tzv. Stack Frame).
  2. 2. Pokud tato funkce zavolá další funkci, přidá se na vrchol nový Stack Frame.
  3. 3. Jakmile funkce skončí, její rámec je odstraněn (Pop) a řízení se vrací funkci pod ní.

> Poznámka: Pokud dojde k nekonečné rekurzi, paměť zásobníku se vyčerpá a program spadne na chybu Stack Overflow.

2. Krok zpět (Undo/Redo)

Textové editory (Word, VS Code) používají dva zásobníky pro sledování změn:

3. Kontrola závorek (Syntax Parsing)

Kompilátory používají zásobník pro kontrolu, zda jsou závorky ve zdrojovém kódu správně spárovány.

4. Vyhodnocování výrazů (RPN)

Zásobník se používá pro vyhodnocování matematických výrazů zapsaných v Reverzní polské notaci (např. ``3 4 +`` místo ``3 + 4``).

Srovnání s Frontou (Queue)

Je důležité nezaměňovat zásobník s frontou.

Vlastnost Zásobník (Stack) Fronta (Queue)
Princip LIFO (Last In, First Out) FIFO (First In, First Out)
Přidávání Push (na vrchol) Enqueue (na konec)
Odebírání Pop (z vrcholu) Dequeue (ze začátku)
Analogie Tos talířů Fronta u pokladny

Časová složitost (Big O)

Operace nad zásobníkem jsou extrémně rychlé, protože se vždy pracuje pouze s jedním koncem datové struktury.


Autorem tohoto textu je AI asistent (2025).