Стек и очередь: фундаментальные структуры данных
Если ты всерьёз изучаешь алгоритмы — начни с основ.
Стек (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 |
---
Вывод
Стек и очередь — это как гаечный ключ и отвёртка в наборе алгоритмиста.
Без них не пишется ни один парсер, ни одна поиск-алгоритм, ни одна работающая архитектура.
