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