В чем разница между стеком и очередью?
Массивы и структуры данных
Стек (stack) и очередь (queue) — линейные структуры данных с разным порядком доступа: стек — LIFO (последним пришёл — первым вышел), очередь — FIFO (первым пришёл — первым вышел).
Стек (LIFO)
Добавление и удаление — с одного конца (вершины).
const stack = [];
stack.push(1);
stack.push(2);
stack.pop(); // 2 — последний добавленныйПрименение: история/undo, стек вызовов функций, обход в глубину (DFS), проверка скобок.
Очередь (FIFO)
Добавление — в конец, удаление — из начала.
const queue = [];
queue.push(1);
queue.push(2);
queue.shift(); // 1 — первый добавленныйПрименение: очередь задач, обработка событий, обход в ширину (BFS), Event Loop (очереди задач).
Главное различие
- Стек — LIFO: последний вошёл — первый вышел.
- Очередь — FIFO: первый вошёл — первый вышел.
Реализация в JS
Оба часто делают на массиве. Для больших объёмов очередь эффективнее реализовать на связном списке или двух стеках, т. к. shift у массива — O(n).
Коротко для собеседования
Стек — LIFO (push/pop), для истории, undo, DFS, стека вызовов. Очередь — FIFO (push/shift), для задач, событий, BFS. Разница в порядке извлечения: стек берёт последний элемент, очередь — первый.