Python 队列数据结构教程

掌握Python中的FIFO队列操作。执行并运行我们的交互式队列示例,展示入队和出队方法。

在编辑器中尝试

概述

队列是一种按照先进先出 (FIFO) 原则运行的线性数据结构。元素在后面添加(入队)并从前面删除(出队),就像商店中的收银台一样。

队列在计算机科学中至关重要,它可以按照任务到达的确切顺序处理任务。它们充当分离生产者和消费者进程的缓冲区。

Python 提供了多种构建队列的方法:基本列表、用于线程安全快速操作的“collections.deque”模块以及专门为多线程应用程序设计的“queue.Queue”模块。

代码和执行输出

使用 collections.deque 构建的交互式 FIFO 队列,用于高效的前端移除操作。

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']

逐步实施

  • 在服务器 Web 框架中处理异步请求
  • 操作系统中的作业调度队列
  • 消息代理和队列缓冲区(如 RabbitMQ 或 Redis)

常见问题解答

为什么不在 Python 中使用 list.pop(0) 出队?

使用 list.pop(0) 很慢,因为它需要将内存中的所有后续元素向左移动一个索引,从而导致 O(n) 性能。相比之下,“deque.popleft()”的运行时间为 O(1) 常量。

什么是优先队列?

优先级队列是一种变体,其中元素根据关联的优先级而不是到达顺序提供服务。 Python 通过“heapq”模块实现这一点。

相关主题