Учебное пособие по структуре данных очереди 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.
Связанные темы
Реализуйте стек LIFO на Python. Запустите наш пример кода интерактивного стека, чтобы узнать ограничения по push, pop, peek и емкости.
Реализация односвязного списка PythonУзнайте, как реализовать односвязный список в Python. Изучите динамическое распределение памяти, операции с узлами, вставку, обход и удаление.