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

数据结构之双端队列

一:定义

双端队列是一种具有队列和栈性质的数据结构,即可在线性表的两端进行插入和删除等操作

二:.Java API中的Deque

知道了双端队列的定义,下面我们来了解一下Java API中的Deque类,知道双端队列是如何创建以及使用的

双端队列的创建以及使用

可以看到Deque类是一个接口,实现一个接口我们要重写接口中的所有方法。但Deque同时也实现了LinkedList类,因此创建Deque类我们可以newLinkedList类

三:代码实现

知道了如何使用双端队列,下面我们就来实现一下其中的各个方法吧。下面将基于链表实现
基于链表
双端队列的添加方法(头部,尾部),我们需要知道要插入位置的头节点以及尾节点,因此使用双向环形链表实现要方便许多
如图所示便为一个双向循环链表

1.节点的创建

创建一个双向循环链表节点,我们需要一个指向前一个节点的指针(pre)以及指向后面节点的指针( next)

2.双端队列的创建
我们需要一个头部哨兵节点sentinel,方便我们获取队首元素(sentinel.next)以及队尾元素(sentinel. pre)

3. addFirst 将指定元素插入此双端队列的开头

思路:向队列头部添加元素,首先我们需要获取哨兵节点sentinel以及头部节点( sentinel.next),再创建一个新节点,更新对应的指针即可

4. addLast 将指定元素插入此双端队列的尾部

5. pollFirst 获取并移除此双端队列的第一个元素

6.pollLast 获取并移除此双端队列的最后一个元素

peekFirst 获取,但不移除此双端队列的第一个元素
思路:直接返回队首元素( sentinel.next.val)
peekLast 获取,但不移除此双端队列的最后一个元素
思路:直接返回队尾元素( sentinel.pre.val)

http://www.jsqmd.com/news/653496/

相关文章:

  • 5大核心功能打造极致Markdown预览体验:Markdown Viewer全面解析
  • “程序包io.swagger.annotations不存在”终极解决方案:从原理到实战的万字深度剖析(2026年最全最新解决方案)
  • 2026年超长论文分章节降AI率的正确方法:多章节处理完整攻略
  • while(1);的top-down分析
  • 第3讲——并查集
  • 探店无数,平凉这口五仁月饼最难忘
  • AI Agents:正在爆发的“代理经济“时代
  • 从‘?’命令到调试高手:Lumerical FDTD脚本排错与数据验证实战指南
  • LLM服务SLO崩塌前的最后17分钟:如何通过流式token监控+语义一致性校验实现亚秒级异常预判
  • 工具技术集成开发环境IDE与轻量级编辑器的选择标准
  • 快递查询-物流查询-快递物流查询接口介绍
  • 2026年金融学论文降AI工具推荐:数据分析和金融模型部分如何降
  • C语言条件编译三种方式及第一种方式的格式、作用与示例
  • Unity URP 下 UI 特效开发指南 深入探索顶点色、Mask 交互与扭曲特效的实战技巧
  • 程序包javax.validation.constraints不存在
  • 控制系统幅频特性曲线绘制实战指南(2)
  • New API:企业级AI模型路由与智能管控解决方案
  • rCore入门-来自清华的OS前沿教程
  • 手把手教你学Simulink——基于Simulink的开关电容变换器电压均衡控制
  • Redis Cluster 扩容策略分析
  • Beam Search实战解析:从参数调优到生成效果对比
  • 二叉树层序遍历
  • 终极家庭音乐体验优化指南:打造智能跨平台音乐管理方案
  • 树莓派上更换镜像源的方法
  • MacOS•\APPstore/-help•〈file,ssh=-fi〉
  • 为什么降AI后某些段落AI率反而升高:降AI副作用分析
  • 周红伟:Herems到底凭什么抢了OpenClaw的风头?
  • RocketMQ实战:从订单超时到死信队列,我是如何设计零丢失消息系统的
  • MoveIt!与OMPL实战避坑:为什么你的机械臂规划总失败?可能是算法没选对
  • 宜昌考研保研新风向:2026这些学校口碑不错,学历提升/考研/艺术设计培训/考证/提分,考研培训机构哪家好 - 品牌推荐师