Python 队列
一、队列的概念及特点
队列(Queue)是计算机科学中一种常见的数据结构,它可以用来存储按照先进先出(First In First Out, FIFO)顺序排列的数据元素。在队列中,新元素在队尾添加,而从队列中移除元素的操作则在队头进行。队列是一种限制端操作的线性表,即只能在表的一端进行插入元素(队尾),而在另一端进行删除元素(队头)。在实际应用中,队列类似于日常生活中排队等候服务的场景,先到的人先接受服务,后来的人需要等待。
Python 提供了内置的 queue
模块,其中包含了多种队列的实现类,包括 Queue
、PriorityQueue
和 LifoQueue
。下面将详细介绍这些队列类的特点及使用方法。
二、Queue 类
Queue
类是 queue
模块中提供的最简单的队列实现。它基于先进先出的原则,在队尾添加元素,在队头删除元素。下面是 Queue
类的基本使用方法:
- 创建一个空的队列:
import queue
q = queue.Queue()
- 向队列中添加元素:
q.put(1)
q.put(2)
q.put(3)
- 从队列中取出元素:
print(q.get()) # 输出:1
print(q.get()) # 输出:2
print(q.get()) # 输出:3
- 判断队列是否为空:
print(q.empty()) # 输出:True
Queue
类的常用方法如下:
put(item[, block[, timeout]])
: 将item
放入队列中,block
参数用于设置是否阻塞,timeout
参数用于设置超时时长。get([block[, timeout]])
: 从队列中取出元素,block
参数和timeout
参数的含义与put()
方法相同。qsize()
: 返回队列中元素的个数。empty()
: 如果队列为空返回True
,否则返回False
。full()
: 如果队列已满返回True
,否则返回False
。
下面是一个完整的示例程序:
import queue
q = queue.Queue()
for i in range(5):
q.put(i)
while not q.empty():
print(q.get())
运行结果如下:
0
1
2
3
4
三、PriorityQueue 类
PriorityQueue
类继承自 Queue
类,它支持优先级的概念,即每个元素都有一个优先级,优先级高的元素先被取出。这在一些需要按照优先级处理任务的场景中非常有用。下面是 PriorityQueue
类的基本使用方法:
- 创建一个空的优先级队列:
import queue
q = queue.PriorityQueue()
- 向队列中添加元素:
q.put((2, "two"))
q.put((1, "one"))
q.put((3, "three"))
- 从队列中取出元素:
print(q.get()) # 输出:(1, 'one')
print(q.get()) # 输出:(2, 'two')
print(q.get()) # 输出:(3, 'three')
与 Queue
类相比,PriorityQueue
类的 put()
方法需要传入一个元组,元组的第一个元素为优先级,第二个元素为实际值。优先级高的元素先被取出。
四、LifoQueue 类
LifoQueue
类继承自 Queue
类,表示后进先出(Last In First Out, LIFO)的队列,也称为栈(Stack)。LifoQueue
类的基本使用方法与 Queue
类类似,只是取出元素时采用了后进先出的顺序。下面是 LifoQueue
类的基本使用方法:
- 创建一个空的栈:
import queue
q = queue.LifoQueue()
- 向栈中添加元素:
q.put(1)
q.put(2)
q.put(3)
- 从栈中取出元素:
print(q.get()) # 输出:3
print(q.get()) # 输出:2
print(q.get()) # 输出:1
LifoQueue
类的使用方法与 Queue
类类似,只是在取出元素时采用了后进先出的顺序。
五、总结
队列是一种常见的数据结构,在实际编程中有着广泛的应用。Python 提供了内置的 queue
模块,其中包含了多种队列实现的类,包括 Queue
、PriorityQueue
和 LifoQueue
。通过使用这些队列类,可以方便地实现先进先出、优先级队列和后进先出的功能。