java数据结构之双端对列

news/2025/3/28 8:33:34/

 一:定义

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

二:.Java API中的Deque  

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

增删查等方法摘要

 

.双端队列的创建以及使用

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

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

 

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.ppmy.cn/news/1580907.html

相关文章

RAGFlow爬虫组件使用及ragflow vs dify 组件设计对比

上周末,两台电脑都失联了,一个是断网了,一个被我不小心关机。导致我两天没环境。只能整理,学点东西。 上周有个有个群友问我ragflow爬虫的没法使用的问题。幸好周六早上的时候实践了下。 使用网络爬虫 我搭建一个最简单的工作流…

Deepseek+飞书实现简历分析建议+面试题

步骤一:创建多维表格 点击云文档点击主页点击新建创建多维表格 步骤二:创建列 首先将多余的列进行删除 创建简历内容列,类型使用文本,目的是将简历内容复制进来 创建AI列:简历分析、简历建议、面试题 点击确定后&…

MySQL事务:确保数据一致性的关键机制

目录 1. 为什么需要事务? 2. 什么是事务? 3. 事务的四大特性 3.1 原子性(Atomicity) 3.2 一致性(Consistency) 3.3 隔离性(Isolation) 3.4 持久性(Durability&…

JVM垃圾回收器演进史:从单线程到亚毫秒停顿的探索之路

垃圾回收(Garbage Collection, GC)是Java生态的核心技术之一,其演进历程不仅反映了硬件性能的飞速发展,也映射了从桌面应用到云原生时代的场景变迁。本文将带你回顾JVM垃圾回收器的重要发展阶段,解析每个时代的关键技术及其背后的设计哲学。 一、单线程时代:Serial GC(J…

机器学习是怎么一步一步由神经网络发展到今天的Transformer架构的?

机器学习和神经网络的发展经历了一系列重要的架构和技术阶段。以下是更全面的总结,涵盖了从早期神经网络到卷积神经网络之前的架构演变: 1. ​早期神经网络:感知机(Perceptron)​ ​时间:1950年代末至1960…

使用 Python 实现批量发送电子邮件

引言:在日常工作中,我们可能会遇到需要批量发送邮件的场景,例如通知、营销邮件或测试邮件。如果手动发送,不仅效率低下,还容易出错。今天,我将分享一个使用 Python 实现的自动化邮件发送脚本,通过读取 Excel 文件中的发件人和收件人信息,轻松完成批量邮件发送任务。 功…

GitHub 超火的开源终端工具——Warp

Warp 作为近年来 GitHub 上备受瞩目的开源终端工具,以其智能化、高性能和协作能力重新定义了命令行操作体验。以下从多个维度深入解析其核心特性、技术架构、用户评价及生态影响力: 一、背景与核心团队 Warp 由前 GitHub CTO Jason Warner 和 Google 前…

NFS共享搭建

准备工作 首先确保已经建了两台虚拟机,都是桥接模式,一台是windows server 2019 一台是centos7 用户配额教程,是在windows server 2019中,先新建虚拟池,然后创建虚拟磁盘,记得添加磁盘类型要选择第三个,要不…