📅  最后修改于: 2023-12-03 15:42:23.369000             🧑  作者: Mango
队列是一种常见的数据结构,它遵循先进先出(FIFO)的原则,即最先进入队列的元素最先被处理,而最后进入队列的元素最后被处理。队列可以用于很多应用场景,例如网络通信、多线程编程等。
Python提供了内置的队列模块——queue,它包含了很多队列相关的类和函数。
queue模块提供了三个主要的类:
Queue类是线程安全的队列,常用于多线程编程。它提供了常见的队列操作方法,如put、get等。
以下是一个使用Queue类的例子:
from queue import Queue
q = Queue()
q.put(1)
q.put(2)
q.put(3)
while not q.empty():
print(q.get())
输出:
1
2
3
LifoQueue类是后进先出(LIFO)的队列,与栈的操作类似。
以下是一个使用LifoQueue类的例子:
from queue import LifoQueue
q = LifoQueue()
q.put(1)
q.put(2)
q.put(3)
while not q.empty():
print(q.get())
输出:
3
2
1
PriorityQueue类是优先级队列,其中每个元素都有一个优先级。按照优先级顺序出队列。
以下是一个使用PriorityQueue类的例子:
from queue import PriorityQueue
q = PriorityQueue()
q.put((3, "apple"))
q.put((2, "banana"))
q.put((1, "orange"))
while not q.empty():
print(q.get()[1])
输出:
orange
banana
apple
queue模块中还提供了一些队列相关的函数:
判断队列是否为空。
from queue import Queue
q = Queue()
print(q.empty()) # True
q.put(1)
print(q.empty()) # False
判断队列是否已经为满。
from queue import Queue
q = Queue(maxsize=2)
print(q.full()) # False
q.put(1)
q.put(2)
print(q.full()) # True
返回队列的大小。
from queue import Queue
q = Queue()
q.put(1)
q.put(2)
q.put(3)
print(q.qsize()) # 3
分别为不阻塞的出队和入队方法,当队列为空或队列已经满时,会抛出异常。与get()和put()方法不同,它们不会阻塞当前线程。
from queue import Queue
q = Queue(maxsize=2)
q.put(1)
q.put(2)
print(q.get_nowait()) # 1
q.put_nowait(3) # 抛出异常,队列已满
队列是一种常见的数据结构,Python提供了内置的queue模块,其中包含了队列相关的类和函数,非常方便。使用queue模块能够更加简便、高效地实现队列的操作。