Курс 3.8 — Алгоритмы · Раздел 02 · Урок 2.5

Очередь

Познакомимся с очередью и принципом «первым пришёл — первым вышел».

Познакомимся с очередью и принципом «первым пришёл — первым вышел».
2.5 — Очередь

Материал урока

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

Добавление элементов в очередь
Добавление элементов в очередь

Вот схематичное изображение очереди. Добавим в нее голубой блок, элемент Blue. Затем добавим зеленый блок, элемент Green. Завершим композицию красным блоком, элементом Red.

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

Извлечение самого раннего элемента очереди
Извлечение самого раннего элемента очереди

Механизм очереди основан на принципе «первым пришел — первым вышел» (FIFO — First In, First Out).

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

Очереди стали популярны благодаря своей естественности. Они работают по принципу «первым пришел — первым обслужен», что соответствует нашему восприятию времени.

Способы реализации стека

  • Сollections.deque
  • Queue.Queue
  • Создание класса односвязного списка.

COLLECTIONS.DEQUE

Очередь можно реализовать с помощью класса deque из модуля collections. Deque имеет более быстрые операции добавления и извлечения элементов с обоих концов контейнера.

from collections import deque
 
stack = deque()

# добавление элементов в стек
stack.append(1)

# извлечение и удаление элементов
element = stack.pop()

Queue.LifoQueue

from queue import Queue
 
stack = LifoQueue(maxsize=3)

# добавление элементов в стек
stack.put('a')

# извлечение и удаление элементов
element = stack.get()