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

java数据结构之双端对列

 一:定义

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

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

 

相关文章:

  • 力扣刷题——25.K个一组翻转链表
  • 【全国产化主板】解决方案探讨:CPU、FPGA、GPU、AI的融合与优化
  • 【最后203篇系列】020 rocksdb agent
  • 《视觉SLAM十四讲》ch13 设计SLAM系统 相机轨迹实现
  • Neo4j GDS-04-图的中心性分析介绍
  • 力扣977. 有序数组的平方(双指针技巧)
  • 【STM32】I²CC通信外设硬件I²CC读写MPU6050(学习笔记)
  • kubernetes高级实战
  • 6.3考研408数据结构中BFS与DFS的易错点及难点解析
  • 9、Python collections模块高效数据结构
  • 前端面试常考基础题目详解
  • 3月20号
  • 通过调整相邻分区实现Linux根分区扩容(ext4文件系统)
  • vue里localStorage可以直接用吗
  • Spring Boot 集成 Kafka 消息发送方案
  • idea配置gitee
  • QT 实现信号源实时采集功能支持频谱图,瀑布图显示
  • 【Linux进程】——进程的程序地址空间
  • B树与B+树在MySQL中的应用:索引
  • 华为OD机试-租车骑绿道-双指针(Java 2023 B卷 100分)
  • 绥化市建设局官方网站/北京建站优化
  • 做图片网站/seo的概念是什么
  • ui设计网课/东莞seo计费
  • 建设网站的过程/网站设计制作培训
  • 松江区做网站/电商培训班一般多少钱
  • 防城港网站建设/2023年最新新闻简短摘抄