Sobes.tech
Intern

Čo sú zásobníky?

sobes.tech AI

Odpoveď od AI

Zásobník je dátová štruktúra, ktorá funguje podľa princípu LIFO (Last-In, First-Out). Prvky sa pridávajú a odstraňujú iba z jedného konca, nazývaného vrchol zásobníka.

Hlavné operácie:

  • push: pridanie prvku na vrchol zásobníka.
  • pop: odstránenie prvku z vrcholu zásobníka a jeho vrátenie.
  • peek: získanie hodnoty prvku na vrchole zásobníka bez jeho odstránenia.
  • isEmpty: kontrola, či je zásobník prázdny.

V Jave je zásobník reprezentovaný triedou Stack, ktorá je podtriedou Vector.

// Príklad použitia zásobníka
import java.util.Stack;

public class StackExample {

    public static void main(String[] args) {
        Stack<String> stack = new Stack<>();

        stack.push("Prvý"); // Pridanie prvkov
        stack.push("Druhý");
        stack.push("Tretí");

        System.out.println("Vrchol zásobníka: " + stack.peek()); // Zobrazenie horného prvku

        while (!stack.empty()) { // Kým zásobník nie je prázdny
            System.out.println("Odobratie: " + stack.pop()); // Odstránenie prvkov
        }
    }
}

Alternatíva a odporúčaný prístup v modernom Java vývoji je použitie ArrayDeque ako zásobníka, pretože poskytuje lepší výkon.

// Príklad použitia ArrayDeque ako zásobníka
import java.util.ArrayDeque;
import java.util.Deque;

public class ArrayDequeStackExample {

    public static void main(String[] args) {
        Deque<String> stack = new ArrayDeque<>(); // Použitie Deque ako zásobníka

        stack.push("Prvý"); // Pridanie prvkov
        stack.push("Druhý");
        stack.push("Tretí");

        System.out.println("Vrchol zásobníka: " + stack.peek()); // Zobrazenie horného prvku

        while (!stack.isEmpty()) { // Kým zásobník nie je prázdny
            System.out.println("Odobratie: " + stack.pop()); // Odstránenie prvkov
        }
    }
}

Použitie zásobníkov:

  • Výpočet aritmetických výrazov (napríklad v inverznej poľskej notácii).
  • Zrušenie/opakovanie operácií v textových editoroch (Ctrl+Z/Ctrl+Y).
  • Riadenie volaní funkcií v operačnom systéme.
  • Rekurzívne algoritmy.
  • Prechádzanie grafov a stromov (hĺbkové vyhľadávanie).