← Назад к вопросам

Что такое стек?

1.0 Junior🔥 131 комментариев
#ООП и проектирование#Структуры данных и алгоритмы#Язык C++

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Стек: структура данных LIFO

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

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

Стек поддерживает две основные операции:

  • push(value) — добавление элемента на вершину стека (O(1))
  • pop() — удаление и возврат элемента с вершины (O(1))

Дополнительно:

  • top() / peek() — просмотр верхнего элемента без удаления (O(1))
  • isEmpty() — проверка пустоты стека (O(1))
  • size() — количество элементов (O(1))

Реализация на C++

#include <stack>
#include <iostream>
using namespace std;

int main() {
    stack<int> s;
    
    // push операции
    s.push(10);
    s.push(20);
    s.push(30);
    
    // peek и pop
    cout << s.top() << endl; // 30
    s.pop();
    cout << s.top() << endl; // 20
    
    // проверка размера
    cout << "Размер: " << s.size() << endl; // 2
    cout << "Пусто: " << s.empty() << endl; // false
    
    return 0;
}

Практические примеры использования

  • Парсинг выражений — проверка сбалансированных скобок
  • Откат операций — реализация функции "Undo"
  • Глубокий поиск (DFS) — граф и дерево обход
  • Обработка вызовов функций — стек вызовов в программе
  • Вычисление постфиксных выражений — обратная польская нотация

Стек вызовов (Call Stack)

В программах существует стек вызовов — часть памяти, где хранятся:

  • Адреса возврата из функций
  • Локальные переменные
  • Параметры функций

При вызове функции создается frame (кадр), при возврате он удаляется со стека. Это критично для понимания памяти и переполнения стека (stack overflow).

Различие от очереди (Queue)

Отличие от очереди (Queue, FIFO):

  • Стек: последний вошел → первый вышел (вершина)
  • Очередь: первый вошел → первый вышел (начало и конец)

Сложность операций

Все основные операции работают за O(1) в среднем случае, что делает стек очень эффективной структурой данных для большинства приложений backend-разработчика.

Что такое стек? | PrepBro