队列
队列
简介
队列是一种操作受限的线性表,只允许在一端(队尾,Rear)进行插入操作,在另一端(队首,Front)进行删除操作。
队列的概念
队列(Queue)是一种常用的数据结构,也被称为后进先出表。它遵循先进先出(FIFO,First In First Out)的原则。
在Python中,虽然没有内置的队列类型,但我们可以使用内置模块 quere
或列表 list
或集合 set
来实现队列的基本操作。
队列的基本操作
- 入队(Enqueue):在队尾添加一个元素。
- 出队(Dequeue):从队首移除一个元素。
- 查看队首元素(Peek/Front):不移除,仅查看队首元素。
- 检查队列是否为空(IsEmpty):检查队列是否没有元素。
使用内置模块队列
import queue
# 创建一个新的队列
q = queue.Queue()
# 向队列中添加元素
for i in range(5):
q.put(i)
# 查看队列中的元素个数
print(q.qsize())
# 从队列中取出元素
while not q.empty():
print(q.get())
使用列表实现队列
使用列表的特定方法,也可以实现队列操作
class QueueUsingList:
def __init__(self):
self.queue = []
# 入队列
def enqueue(self, item):
# 向列表的尾部追加元素
self.queue.append(item)
# 出队列
def dequeue(self):
# 如果队列不为空,则出队列
if not self.is_empty():
# 将列表中的第一个元素取出并从列表中删除
return self.queue.pop(0)
# 如果队列为空,则返回 None
return None
# 查看队首元素
def peek(self):
# 判断队列是否为空
if not self.is_empty():
# 不为空返回列表中的第一个元素
return self.queue[0]
# 为空返回 None
return None
# 判断队列是否为空
def is_empty(self):
# 判断列表中元素个数是否为 0
return len(self.queue) == 0
# 获取队列中元素个数
def size(self):
# 返回列表中元素个数
return len(self.queue)
if __name__ == '__main__':
# 应用代码
q = QueueUsingList()
for i in range(5):
q.enqueue(i*10)
print(q.size())
while not q.is_empty():
print(q.dequeue())
5. 队列的应用示例
队列常用于任务调度、广度优先搜索(BFS)等场景,最典型的就是各种排队叫号系统的应用。
任务调度示例
def task_scheduler():
task_queue = QueueUsingDeque()
# 假设我们有一系列任务
tasks = ["任务1", "任务2", "任务3", "任务4"]
# 将任务入队
for task in tasks:
task_queue.enqueue(task)
# 按顺序处理任务
while not task_queue.is_empty():
current_task = task_queue.dequeue()
print(f"正在执行任务: {current_task}")
# 调用函数
task_scheduler()
6. 总结
队列是一种重要的数据结构,理解其概念和实现对于编程和算法设计至关重要。