Все разделы
Выбрать школу

Школа. Увлечения. Большое будущее.

PROSCHOOLS · ОБРАЗОВАНИЕ РЯДОМ

Ваш город

Выберите город, чтобы находить образование и возможности рядом.

Как учитываем городКаталог и кнопки «Выбрать школу» покажут школы выбранного города.Онлайн-курсы, учебник, ГДЗ и задания к экзаменам доступны по всей России.

Популярные города

Будет выбран: Вся Россия

Учебные материалы останутся прежними.

Поиск по сайту

По всему сайтуШколы выбранного города — выше в результатах

С чего начнём?

↑ ↓ — выбрать результат · Enter — открыть · Esc — закрыть

Стек, очередь и дек

💻 Информатика · 11 класс

Линейные структуры данных с разными правилами доступа к элементам и их применение.

Клавиатура в компьютерном классе
Иллюстрация к предмету «Информатика»Hmartil · Wikimedia Commons · CC BY-SA 4.0

Линейные структуры данных

Стек, очередь и дек — это линейные структуры данных, которые отличаются правилами добавления и извлечения элементов. Они хранят набор значений, но дают доступ только к концам последовательности, а не к произвольному элементу.

Стек

Стек работает по принципу LIFO — «последним пришёл, первым ушёл». Элементы добавляют и удаляют только с одного конца, который называют вершиной. Аналогия — стопка тарелок: берут верхнюю. Основные операции:

  • push — положить элемент на вершину;
  • pop — снять элемент с вершины;
  • top — посмотреть верхний элемент, не снимая.

Стек применяют для вызова функций, проверки скобок, перевода выражений в обратную польскую запись и обхода в глубину.

Очередь

Очередь работает по принципу FIFO — «первым пришёл, первым ушёл». Элементы добавляют в конец, а извлекают из начала, как живая очередь в магазине. Операции enqueue (добавить в конец) и dequeue (взять из начала). Очередь используют при обходе в ширину и в буферах данных.

Дек

Дек (двусторонняя очередь) — структура, в которую можно добавлять и из которой можно извлекать элементы с обоих концов. Дек обобщает и стек, и очередь.

СтруктураПринципГде доступ
СтекLIFOодин конец
ОчередьFIFOоба конца, по одному
Дексмешанныйоба конца

Разбор примера

Проследим работу стека для проверки скобок в выражении (a+b):

встретили '(' -> push, стек: [ ( ] встретили ')' -> pop, стек: [ ] стек пуст -> скобки сбалансированы

Если в конце стек не пуст или встретилась закрывающая скобка при пустом стеке — баланс нарушен.

Как хранят эти структуры

Стек, очередь и дек можно реализовать на основе массива или связного списка. В массиве хранят данные и индексы концов; при выходе за границу массив увеличивают. В связном списке каждый элемент хранит значение и ссылку на следующий, поэтому добавление и удаление с конца выполняются быстро и без перевыделения памяти. Важно, что у всех этих структур операции добавления и извлечения выполняются за постоянное время, не зависящее от числа элементов.

Кольцевая очередь

Чтобы массив под очередь не «уезжал» вправо при многократном добавлении и удалении, применяют кольцевую очередь: индексы начала и конца, дойдя до края массива, переходят обратно в его начало. Так массив используется по кругу и память расходуется экономно. Это типичное решение для буфера, в который данные поступают и из которого считываются непрерывно, например при передаче по сети.

Частые ошибки. Пытаются извлечь элемент из пустого стека или очереди — это ошибка переполнения снизу. Путают концы добавления и удаления в очереди. Думают, что в стеке можно обратиться к нижнему элементу напрямую — нельзя, только к вершине.

Кратко о главном

  • Стек работает по правилу LIFO: доступ только к вершине.
  • Очередь работает по правилу FIFO: вход в конец, выход из начала.
  • Дек допускает операции с обоих концов.
  • Стек нужен для рекурсии и проверки скобок, очередь — для обхода в ширину.
  • Извлечение из пустой структуры — типичная ошибка.