Python 队列

Python 队列

Python 队列

一、队列的概念及特点

队列(Queue)是计算机科学中一种常见的数据结构,它可以用来存储按照先进先出(First In First Out, FIFO)顺序排列的数据元素。在队列中,新元素在队尾添加,而从队列中移除元素的操作则在队头进行。队列是一种限制端操作的线性表,即只能在表的一端进行插入元素(队尾),而在另一端进行删除元素(队头)。在实际应用中,队列类似于日常生活中排队等候服务的场景,先到的人先接受服务,后来的人需要等待。

Python 提供了内置的 queue 模块,其中包含了多种队列的实现类,包括 QueuePriorityQueueLifoQueue。下面将详细介绍这些队列类的特点及使用方法。

二、Queue 类

Queue 类是 queue 模块中提供的最简单的队列实现。它基于先进先出的原则,在队尾添加元素,在队头删除元素。下面是 Queue 类的基本使用方法:

  1. 创建一个空的队列:
import queue

q = queue.Queue()
Python
  1. 向队列中添加元素:
q.put(1)
q.put(2)
q.put(3)
Python
  1. 从队列中取出元素:
print(q.get())  # 输出:1
print(q.get())  # 输出:2
print(q.get())  # 输出:3
Python
  1. 判断队列是否为空:
print(q.empty())  # 输出:True
Python

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())
Python

运行结果如下:

0
1
2
3
4
Python

三、PriorityQueue 类

PriorityQueue 类继承自 Queue 类,它支持优先级的概念,即每个元素都有一个优先级,优先级高的元素先被取出。这在一些需要按照优先级处理任务的场景中非常有用。下面是 PriorityQueue 类的基本使用方法:

  1. 创建一个空的优先级队列:
import queue

q = queue.PriorityQueue()
Python
  1. 向队列中添加元素:
q.put((2, "two"))
q.put((1, "one"))
q.put((3, "three"))
Python
  1. 从队列中取出元素:
print(q.get())  # 输出:(1, 'one')
print(q.get())  # 输出:(2, 'two')
print(q.get())  # 输出:(3, 'three')
Python

Queue 类相比,PriorityQueue 类的 put() 方法需要传入一个元组,元组的第一个元素为优先级,第二个元素为实际值。优先级高的元素先被取出。

四、LifoQueue 类

LifoQueue 类继承自 Queue 类,表示后进先出(Last In First Out, LIFO)的队列,也称为栈(Stack)。LifoQueue 类的基本使用方法与 Queue 类类似,只是取出元素时采用了后进先出的顺序。下面是 LifoQueue 类的基本使用方法:

  1. 创建一个空的栈:
import queue

q = queue.LifoQueue()
Python
  1. 向栈中添加元素:
q.put(1)
q.put(2)
q.put(3)
Python
  1. 从栈中取出元素:
print(q.get())  # 输出:3
print(q.get())  # 输出:2
print(q.get())  # 输出:1
Python

LifoQueue 类的使用方法与 Queue 类类似,只是在取出元素时采用了后进先出的顺序。

五、总结

队列是一种常见的数据结构,在实际编程中有着广泛的应用。Python 提供了内置的 queue 模块,其中包含了多种队列实现的类,包括 QueuePriorityQueueLifoQueue。通过使用这些队列类,可以方便地实现先进先出、优先级队列和后进先出的功能。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册