Что такое стек как структура данных?

«Что такое стек как структура данных?» — вопрос из категории Алгоритмы и структуры данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Стек (Stack) — это абстрактный тип данных, работающий по принципу LIFO (Last In, First Out): последний добавленный элемент извлекается первым.

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

  • push(T value) — добавляет элемент на вершину стека.
  • pop() — удаляет и возвращает элемент с вершины стека.
  • peek() — возвращает элемент с вершины без удаления.
  • isEmpty() — проверяет, пуст ли стек.

Реализация и пример использования в Java:

import java.util.Stack;

Stack<Integer> stack = new Stack<>();
stack.push(10); // Стек: [10]
stack.push(20); // Стек: [10, 20]
stack.push(30); // Стек: [10, 20, 30]

System.out.println(stack.peek()); // 30 (стек остаётся [10, 20, 30])
System.out.println(stack.pop());  // 30 (стек становится [10, 20])
System.out.println(stack.pop());  // 20 (стек становится [10])

Типичные сценарии применения:

  • Стек вызовов (Call Stack) для управления вызовами методов и локальными переменными.
  • Алгоритмы: обход графа в глубину (DFS), проверка сбалансированности скобок.
  • Отмена операций (Undo) в текстовых редакторах.
  • Вычисление выражений в обратной польской записи (RPN).