Назад к вопросам

Ответ от нейросети

sobes.tech 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).
  • Управление вызовами функций в операционной системе.
  • Рекурсивные алгоритмы.
  • Обход графов и деревьев (поиск в глубину).