Учебное пособие по структуре данных очереди Python

Освойте операции с очередью FIFO в Python. Выполните и запустите наш пример интерактивной очереди, демонстрирующий методы постановки и удаления из очереди.

Попробуйте в редакторе

Обзор

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

Очереди имеют решающее значение в информатике для обработки задач в точном порядке их поступления. Они действуют как буферы, разделяющие процессы производителя и потребителя.

Python предоставляет несколько способов построения очередей: базовые списки, модульcollections.deque для потокобезопасных быстрых операций и модульqueue.Queue, специально разработанный для многопоточных приложений.

Код и вывод выполнения

Интерактивная очередь FIFO, созданная с использованием Collections.deque для эффективных операций переднего удаления.

from collections import deque

class Queue:
    def __init__(self):
        self.buffer = deque()
        
    def enqueue(self, item):
        self.buffer.append(item)
        print(f"Enqueued: {item}")
        
    def dequeue(self):
        if self.is_empty():
            return "Underflow: Queue is empty"
        dequeued = self.buffer.popleft()
        print(f"Dequeued: {dequeued}")
        return dequeued
        
    def is_empty(self):
        return len(self.buffer) == 0
        
    def size(self):
        return len(self.buffer)

# Test the Queue
q = Queue()
q.enqueue("Customer 1")
q.enqueue("Customer 2")
q.enqueue("Customer 3")

print(f"Queue Size: {q.size()}")
q.dequeue()
q.dequeue()

print(f"Remaining in Queue: {list(q.buffer)}")
Терминальный выход
Enqueued: Customer 1
Enqueued: Customer 2
Enqueued: Customer 3
Queue Size: 3
Dequeued: Customer 1
Dequeued: Customer 2
Remaining in Queue: ['Customer 3']

Пошаговая реализация

  • Обработка асинхронных запросов в серверных веб-фреймворках
  • Очереди планирования заданий в операционных системах
  • Брокеры сообщений и буферы очередей (например, RabbitMQ или Redis)

Часто задаваемые вопросы

Почему бы не использовать list.pop(0) для удаления из очереди в Python?

Использование `list.pop(0)` является медленным, поскольку требует сдвига всех последующих элементов в памяти на один индекс влево, что приводит к производительности O(n). Напротив, `deque.popleft()` выполняется за постоянное время O(1).

Что такое приоритетная очередь?

Очередь с приоритетами — это вариант, в котором элементы обслуживаются на основе связанного приоритета, а не порядка прибытия. Python реализует это через модуль heapq.

Связанные темы