news 2026/4/24 9:50:27

数据结构之双端队列

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数据结构之双端队列

一:定义

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

二:.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)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 3:48:11

【赵渝强老师】OceanBase的分区表

OceanBase当前支持的类型包括Range分区、Range COLUMNS分区、List分区、List COLUMNS分区、Hash分区和Key分区等,其中: Range分区、Range COLUMNS分区、List分区和List COLUMNS分区可以用于解决业务中大量删除带来的性能问题,支持快速删除分…

作者头像 李华
网站建设 2026/4/17 3:44:58

嵌入式单片机/STM32模块开源代码地图

GitHub 网址:https://github.com/ 当需要找模板时,可以这样搜索:芯片平台 模块名 关键词(driver/library/embeded) 例如: 找 OLED 驱动:stm32 oled i2c driver 找震动电机:vibra…

作者头像 李华
网站建设 2026/4/17 3:43:11

远程开发团队晋升密码:软件测试从业者影响力构建手册

在数字世界中重塑你的价值坐标在远程与分布式工作模式成为软件研发新常态的今天,物理工位的消失并未削弱职场竞争的激烈程度,反而让衡量价值的标尺发生了根本性的转变。对于软件测试从业者而言,传统的“勤奋执行者”形象已不足以支撑其在虚拟…

作者头像 李华
网站建设 2026/4/17 3:42:14

Claude Code新手实战:我是怎么蒸馏出“叶金荣“Skill的

用了一段时间Claude Code(简称CC),发现它最强的能力之一就是Skill。下面这几点是我从完全不会到能自己创建Skill的真实经验,分享给刚上路的朋友。1. 不知道怎么用某个Skill?直接问CC当你看到一个Skill,但完…

作者头像 李华
网站建设 2026/4/17 3:38:22

手把手教你学Simulink——基于Simulink的三端口隔离型DC-DC变换器能量管理

目录 手把手教你学Simulink——基于Simulink的三端口隔离型DC-DC变换器能量管理​ 摘要​ 一、背景与挑战​ 1.1 微电网与多源系统的“木桶效应”​ 1.2 三有源桥(TAB):一台顶三台的“能量立交桥”​ 1.3 破局痛点与设计目标​ 二、系统架构与核心控制推导​ 2.1 整体…

作者头像 李华