Закрепление материала: Очередь и дек

Модуль "Очередь и дек" • урок 6 из 7 • ~5 минут

Суть урока. Повторение и закрепление ключевых концепций очереди и дека: принцип FIFO, особенности файловой реализации, устройство кольцевого буфера, важность двух указателей в динамической очереди и обобщающая роль дека.
Кольцевой буфер на массиве и очередь на связном списке: у массива сплошная память и операции за O(1) ценой фиксированного размера, у списка лимита нет, но есть malloc и память под указатели
Что выбрать: сплошная память с лимитом или неограниченная цепочка узлов

Краткое резюме модуля

В этом модуле мы рассмотрели спецификацию и варианты реализации двух родственных структур данных:

Ключевые идеи

Коротко: главное

  • Принцип FIFO: очередь работает как труба - кто первым вошел, тот первым и вышел, сохраняя изначальный порядок элементов.
  • Очередь на файле: нужна для долговременного хранения больших объемов данных. Надежно, но работает медленно из-за необходимости переписывать элементы при извлечении.
  • Кольцевой буфер: оптимальная реализация очереди на статическом массиве. Массив виртуально "замыкается" через остаток от деления, что позволяет выполнять вставку и удаление за O(1) без физических сдвигов данных.
  • Очередь на связном списке: в отличие от стека, требует два указателя (first и last). Указатель на конец очереди необходим, чтобы добавление работало мгновенно за O(1), без обхода всего списка.
  • Дек (deque): двусторонняя очередь, обобщающая поведение стека и обычной очереди. Вставка и удаление возможны на обоих концах за O(1).

Проверьте себя

Вопрос 1

Зачем в реализации очереди на статическом массиве используется кольцевой буфер?

Вопрос 2

Для чего в очереди на односвязном списке нужен второй указатель last (хвост)?

Вопрос 3

Как получить поведение классического стека (LIFO), используя двустороннюю очередь (дек)?

Как вам урок? Спасибо за отзыв!