双端队列(Deque)
作者:野牛程序员:2025-12-22 11:36:29python阅读 2100
双端队列(Deque)
# /*
# 双端队列(Deque)
# --------------------------------------------------------
# 概念:
# 双端队列允许在 队头 和 队尾 同时进行插入与删除。
# 比普通队列更灵活,常用于:
# 1) 滑动窗口算法
# 2) 最近使用记录(LRU)
# 3) 任务调度
# 4) 数据两端频繁操作的场景
#
# Python 内置 collections.deque,效率远高于 list。
# */
from collections import deque
# 创建一个双端队列
dq = deque()
print("双端队列:头尾均可操作")
print("-" * 40)
# -----------------------------------
# 基本操作:右端入队 append()
dq.append(10)
dq.append(20)
dq.append(30)
print("右端入队 10, 20, 30 →", dq)
# 基本操作:左端入队 appendleft()
dq.appendleft(5)
dq.appendleft(2)
print("左端入队 5, 2 →", dq)
# -----------------------------------
# 删除操作:右端删除 pop()
item = dq.pop()
print("右端出队 →", item, "当前队列:", dq)
# 删除操作:左端删除 popleft()
item = dq.popleft()
print("左端出队 →", item, "当前队列:", dq)
# -----------------------------------
# 查看两端元素
print("队头元素:", dq[0])
print("队尾元素:", dq[-1])
# -----------------------------------
# 判断是否为空
print("是否为空:", len(dq) == 0)
# -----------------------------------
# 要点总结:
# 1) 双端队列支持两端插入与删除;
# 2) 常用方法:
# - append() → 右端入队
# - appendleft() → 左端入队
# - pop() → 右端出队
# - popleft() → 左端出队
# 3) collections.deque 采用双向链表结构,效率极高;
# 4) 适用于滑动窗口、LRU缓存、数据两端频繁操作;
# 5) 操作复杂度均为 O(1),优于 list 的头部操作。
# */
#
# 双端队列:头尾均可操作
# ----------------------------------------
# 右端入队 10, 20, 30 → deque([10, 20, 30])
# 左端入队 5, 2 → deque([2, 5, 10, 20, 30])
# 右端出队 → 30 当前队列: deque([2, 5, 10, 20])
# 左端出队 → 2 当前队列: deque([5, 10, 20])
# 队头元素: 5
# 队尾元素: 20
# 是否为空: False野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

