Sobes.tech
Intern

Какво са стековете?

sobes.tech AI

Отговор от AI

Стекът е структура от данни, която работи по принципа LIFO (Last-In, First-Out). Елементите се добавят и премахват само от един край, наречен връх на стека.

Основни операции:

  • push: добавяне на елемент към върха на стека.
  • pop: премахване на елемент от върха на стека и връщането му.
  • peek: получаване на стойността на елемента на върха на стека без да се премахва.
  • isEmpty: проверка дали стекът е празен.

В Java стекът е представен чрез класа Stack, който е подклас на Vector.

// Пример за използване на Stack
import java.util.Stack;

public class StackExample {

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

        stack.push("Първи"); // Добавяне на елементи
        stack.push("Втори");
        stack.push("Трети");

        System.out.println("Върхът на стека: " + stack.peek()); // Виждаме горния елемент

        while (!stack.empty()) { // Докато стекът не е празен
            System.out.println("Извличаме: " + stack.pop()); // Извличане на елементи
        }
    }
}

Алтернативата и по-препоръчителният подход в съвременната Java разработка е използването на ArrayDeque като стек, тъй като осигурява по-добра производителност.

// Пример за използване на ArrayDeque като стек
import java.util.ArrayDeque;
import java.util.Deque;

public class ArrayDequeStackExample {

    public static void main(String[] args) {
        Deque<String> stack = new ArrayDeque<>(); // Използване на Deque като стек

        stack.push("Първи"); // Добавяне на елементи
        stack.push("Втори");
        stack.push("Трети");

        System.out.println("Върхът на стека: " + stack.peek()); // Виждаме горния елемент

        while (!stack.isEmpty()) { // Докато стекът не е празен
            System.out.println("Извличаме: " + stack.pop()); // Извличане на елементи
        }
    }
}

Приложения на стекове:

  • Изчисление на аритметични изрази (например, в обратна полска нотация).
  • Отмяна/повторение на операции в текстови редактори (Ctrl+Z/Ctrl+Y).
  • Управление на извикванията на функции в операционната система.
  • Рекурсивни алгоритми.
  • Обход на графи и дървета (търсене в дълбочина).