2025-01-07 21:05阅读: 11评论: 0推荐: 0

python中的队列

在 Python 中,队列(Queue)通常使用 collections.deque 来实现,因其提供了高效的从两端添加和删除元素的操作。队列通常遵循 先进先出(FIFO) 的原则,也就是最先插入的元素最先被移除。

队列的基本操作:

  1. append(x): 将元素 x 加入队列的尾部。
  2. popleft(): 移除并返回队列的头部元素。
  3. appendleft(x): 将元素 x 加入队列的头部(虽然一般队列不会使用这个操作,但它也能完成双端队列的操作)。
  4. pop(): 移除并返回队列的尾部元素。

示例代码:

from collections import deque
# 创建一个空的队列
queue = deque()
# 入队(将元素添加到队列的尾部)
queue.append(1) # 队列 -> [1]
queue.append(2) # 队列 -> [1, 2]
queue.append(3) # 队列 -> [1, 2, 3]
# 出队(从队列的头部移除元素)
print(queue.popleft()) # 输出: 1, 队列 -> [2, 3]
print(queue.popleft()) # 输出: 2, 队列 -> [3]
# 查看当前队列内容
print(queue) # 输出: deque([3])
# 再次入队
queue.append(4) # 队列 -> [3, 4]
print(queue) # 输出: deque([3, 4])
# 再次出队
print(queue.popleft()) # 输出: 3, 队列 -> [4]

解释:

  • append(x):将元素 x 插入队列的尾部(加入到队列的后面)。
  • popleft():从队列的头部移除并返回元素。这个操作遵循 FIFO(先进先出)原则。

队列的典型应用:

队列的 FIFO 特性使得它非常适用于很多需要保持顺序的应用,尤其是广度优先搜索(BFS)等场景。

队列的算法题使用场景:

  1. 广度优先搜索(BFS)

    • BFS 通常使用队列来逐层遍历图或树的节点。每次处理一个节点时,将其邻接节点按顺序添加到队列中。
    from collections import deque
    def bfs(graph, start):
    queue = deque([start])
    visited = set([start])
    while queue:
    node = queue.popleft()
    print(node) # 访问节点
    for neighbor in graph[node]:
    if neighbor not in visited:
    visited.add(neighbor)
    queue.append(neighbor)
    graph = {
    1: [2, 3],
    2: [1, 4],
    3: [1],
    4: [2]
    }
    bfs(graph, 1) # 从节点 1 开始广度优先搜索
  2. 模拟队列
    队列也经常用于模拟现实世界中的排队场景,比如任务调度、流量控制等。

    • 在算法题中,通常我们用队列来处理按顺序处理的任务,或者是有限的容量限制任务。
  3. 滑动窗口算法
    队列在滑动窗口问题中也很常见,尤其是求解 最大值/最小值 等窗口内的一些问题。

    from collections import deque
    def maxSlidingWindow(nums, k):
    queue = deque()
    result = []
    for i, num in enumerate(nums):
    # Remove elements that are out of this window
    if queue and queue[0] < i - k + 1:
    queue.popleft()
    # Remove elements that are less than the current number
    while queue and nums[queue[-1]] < num:
    queue.pop()
    queue.append(i)
    if i >= k - 1:
    result.append(nums[queue[0]])
    return result
    nums = [1,3,-1,-3,5,3,6,7]
    k = 3
    print(maxSlidingWindow(nums, k)) # Output: [3, 3, 5, 5, 6, 7]

重点总结:

  • deque 是 Python 中非常高效的队列实现,提供 O(1) 的时间复杂度来在队列两端进行添加和删除操作。

  • 队列操作:

    • append(x):将元素 x 添加到队尾。
    • popleft():移除并返回队头元素。
    • appendleft(x):将元素 x 添加到队头(可选,适用于双端队列的场景)。
  • 队列是广度优先搜索(BFS)等需要按顺序处理任务的算法中的重要数据结构。

小结:

deque 提供了非常高效的队列操作,并且在广度优先搜索、滑动窗口等算法中非常有用。在刷题中,特别是在处理图、树和序列类问题时,队列(deque)经常被用来维护处理顺序和支持高效的插入/删除操作。

本文作者:清澈的澈

本文链接:https://www.cnblogs.com/lmc7/p/18658388

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   清澈的澈  阅读(11)  评论(0编辑  收藏  举报
历史上的今天:
2024-01-07 分布式事务管理
评论
收藏
关注
推荐
深色
回顶
收起
点击右上角即可分享
微信分享提示