Стек и очередь: фундаментальные структуры данных
Если ты всерьёз изучаешь алгоритмы — начни с основ.
Стек (stack) и очередь (queue) — две простые, но очень мощные структуры.
Они лежат в основе всего: от рекурсии до BFS, парсинга выражений и undo-функций.
Принцип: LIFO — Last In, First Out (последний пришёл — первый ушёл)
Представь стопку тарелок: ты кладёшь сверху — и снимаешь сверху.
Пример на Python:
Пример на C:
---
Принцип: FIFO — First In, First Out (первый пришёл — первый ушёл)
Как живая очередь: кто первый стал, тот и обслужен первым.
Пример на Python:
Пример на C:
---
---
Стек и очередь — это как гаечный ключ и отвёртка в наборе алгоритмиста.
Без них не пишется ни один парсер, ни одна поиск-алгоритм, ни одна работающая архитектура.
А ты помнишь, когда впервые написал свой стек? Или очередь? Делись историями 
Стек (stack) и очередь (queue) — две простые, но очень мощные структуры.
Они лежат в основе всего: от рекурсии до BFS, парсинга выражений и undo-функций.
Что такое стек (stack)?

Представь стопку тарелок: ты кладёшь сверху — и снимаешь сверху.
push(x)
— положить элементpop()
— снять последнийtop()
— посмотреть на верхний

Python:
stack = []
stack.append(10)
stack.append(20)
print(stack.pop()) # 20
print(stack[-1]) # 10 (top)

C:
#define MAX 100
int stack[MAX], top = -1;
void push(int x) { if (top < MAX - 1) stack[++top] = x; }
int pop() { return (top >= 0) ? stack[top--] : -1; }
int peek() { return (top >= 0) ? stack[top] : -1; }
---
🛤 А очередь (queue)?

Как живая очередь: кто первый стал, тот и обслужен первым.
enqueue(x)
— поставить в конецdequeue()
— взять с начала

Python:
from collections import deque
q = deque()
q.append(1) # enqueue
q.append(2)
print(q.popleft()) # 1
print(q[0]) # 2 (front)

C:
#define MAX 100
int queue[MAX], front = 0, rear = 0;
void enqueue(int x) {
if (rear < MAX) queue[rear++] = x;
}
int dequeue() {
return (front < rear) ? queue[front++] : -1;
}
---
Где используются стек и очередь
Парсеры выражений, интерпретаторы → стек
Undo/Redo в редакторах → стек
Поиск в ширину (BFS) → очередь
Менеджеры задач, буферы событий → очередь
Поддержка рекурсии → стек вызовов
Сравнение
Операция | Stack | Queue |
---|---|---|
Добавить элемент | push(x) | enqueue(x) |
Удалить элемент | pop() | dequeue() |
Порядок | LIFO | FIFO |
Типичная реализация | Массив / список | Кольцевой буфер / deque |
---
Вывод
Стек и очередь — это как гаечный ключ и отвёртка в наборе алгоритмиста.
Без них не пишется ни один парсер, ни одна поиск-алгоритм, ни одна работающая архитектура.

