当前位置: 首页 > news >正文

数据结构-deque(双端队列)和queue(队列)区别

在数据结构中,deque(双端队列,Double-Ended Queue)和queue(队列)都是用于存储和操作元素的线性结构,但它们的功能和适用场景有明显区别。

1. 基本概念

  • queue(队列)

    一种遵循 FIFO(先进先出,First-In-First-Out) 规则的线性结构。元素只能从一端(队尾,rear)插入,从另一端(队头,front)删除,类似于现实中排队的场景。

  • deque(双端队列)

    允许在 两端都进行插入和删除操作 的线性结构。它结合了队列和栈的特性,既可以像队列一样FIFO操作,也可以像栈一样LIFO(后进先出)操作。

2. 区别

特性queue(队列)deque(双端队列)
操作方向只能在队尾插入、队头删除两端均可插入和删除
核心操作入队(enqueue)、出队(dequeue)前端入队、后端入队、前端出队、后端出队
适用场景仅需FIFO操作的场景(如任务调度、广度优先搜索)需要在两端灵活操作的场景(如滑动窗口、实现栈和队列)
实现效率若基于链表实现,两端操作效率不同(队尾插入O(1),队头删除O(1);但中间操作O(n))通常基于动态数组或双向链表实现,两端操作均为O(1)

3. 代码示例(Python)

在Python的collections模块中,两者均有实现:

from collections import queue, deque# 队列(queue)示例
q = queue.Queue()
q.put(1)   # 入队
q.put(2)
print(q.get())  # 出队:1(FIFO)# 双端队列(deque)示例
dq = deque()
dq.append(1)    # 后端入队
dq.appendleft(2)  # 前端入队
print(dq.pop())   # 后端出队:1
print(dq.popleft())  # 前端出队:2
  • queue 是严格的FIFO结构,适用于仅需单向操作的场景。
  • deque 更灵活,支持双向操作,且两端操作效率更高,是实现队列、栈或需要频繁在两端操作的首选。

http://www.dtcms.com/a/325009.html

相关文章:

  • Flask多进程数据库访问问题详解
  • spring全家桶使用教程
  • Lua语言元表、协同程序
  • 密码学的数学基础2-Paillier为什么产生密钥对比RSA慢
  • SQL三剑客:DELETE、TRUNCATE、DROP全解析
  • 深度相机---双目深度相机
  • 浏览器CEFSharp+X86+win7 之 浏览器右键菜单(六)
  • Mysql笔记-存储过程与存储函数
  • vulnhub-doubletrouble靶场攻略
  • Linux C文件操作函数
  • 谷歌DeepMind发布Genie 3:通用型世界模型,可生成前所未有多样化的交互式虚拟环境
  • C++移动语义、完美转发及编译器优化零拷贝
  • PostgreSQL 批量COPY导入优化参数配置
  • 近红外与可见光图像融合的多种方法实现
  • OpenAI正式发布GPT-5:迈向AGI的关键一步
  • Java基础-多线程
  • lesson34:深入理解Python线程:从基础到实战优化
  • hysAnalyser --- 支持文件转播UDP/RTP实时流功能
  • CompletableFuture实现Excel 多个sheet页批量导出
  • 【数据分析】循环移位岭回归分析:光遗传学冻结行为模式研究
  • 【PyTorch】单目标检测项目部署
  • MPLS的基本工作原理
  • AI玩具新浪潮:百亿资本涌入,情感计算重塑陪伴经济
  • WAIC2025逛展分享·AI鉴伪技术洞察“看不见”的伪造痕迹
  • JAVA中关于Stream流的使用
  • 虚拟主机示例
  • vuhub drippingblues靶场攻略
  • Windows环境下私有化部署Dify,并接入通义千问模型
  • UNet改进(31):基于Adaptive Attention的UNet设计与实践
  • 基于Spring SSE构建实时监控系统