В чем разница между структурой данных стек (Stack) и очередь (Queue)?

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

Ответ

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

Очередь (Queue) — это структура данных, работающая по принципу FIFO (First In, First Out): первый добавленный элемент извлекается первым.

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

Стек (используется Deque вместо устаревшего Stack):

Deque<Integer> stack = new ArrayDeque<>();
stack.push(1); // Добавить в вершину
stack.push(2);
int top = stack.pop(); // Извлечь с вершины -> вернет 2
int peek = stack.peek(); // Посмотреть вершину -> вернет 1

Очередь:

Queue<Integer> queue = new LinkedList<>();
queue.offer(1); // Добавить в конец
queue.offer(2);
int head = queue.poll(); // Извлечь из начала -> вернет 1
int peek = queue.peek(); // Посмотреть начало -> вернет 2

Области применения:

  • Стек: вызов функций (call stack), отмена действий (undo), обход деревьев (DFS), синтаксический анализ.
  • Очередь: обработка задач в порядке поступления, кэширование (например, LRU-кэш), обход графов (BFS), буферизация.