数据结构--队列2--双端队列--java双端队列

news2025/2/22 1:50:28

介绍

双端队列,和前面学的队列和栈的区别在于双端队列2端都可以进行增删,其他2个都是只能一端可以增/删。

实现

链表

因为2端都需要可以操作所以我们使用双向链表
我们也需要一共头节点
所以节点设置

static class Node<E>{
	E value;
	Node<E> next;
	Node<E> pre;

	public Node(Node<E> pre,E value,Node<E> next){
		this.value = value;
		this.pre = pre;
		this.next = next;
	}
}

队列的类维护:

  • 容量
  • 队列元素个数
  • 哨兵

哨兵初始头和尾都指向自己,value为null

添加/删除就是操作哨兵的前后就可以了如。
offerFirest向头节点添加:

  • 头节点为哨兵的next
  • 然后就是链表操作就可以了

这种操作应该在链表学习的时候很熟悉了,就都没写了。
其他的同理

数组

维护一共头尾指针操作数组前后就可以了。具体直接看下面java的ArrayDeque类实现就可以了。

java实现类学习

双端队列的接口Deque集成自Quene队列接口,可用于队列的计算。
在这里插入图片描述

实现主要有
在这里插入图片描述
链表实现的LinkedList,这个类的作用太多了,当然在链表里面一般在重点讲,这里就不详细说了。

LinkedList

LinkedList既然能做双端队列,那么其方法也就都实现了的。
在这里插入图片描述
实现大概就是上面讲的哪样子实现的

ArrayDeque

ArrayDeque是java双端队列的数组实现方式。

阵列deques没有容量限制;它们根据需要增长以支持使用。它们不是线程安全的;在没有外部同步的情况下,它们不支持多个线程的并发访问。禁止使用空元素。当用作堆栈时,这个类可能比Stack快,当用作队列时,它可能比LinkedList快。

维护的头尾指针还有数组
在这里插入图片描述

构造

构造上初始化容量
如果传递的集合,则拷贝

未给容量则按照16+1,双指针1需要留着用于区分为空和为满
给定容量小于1,则按1
等于int的最大值,则按照int的最大值否则则是给定值+1,1也是不存的。

tail和head是不需要初始化的因为java默认就是0

操作

  • 添加头部
    在这里插入图片描述
    先让head取模减一
    在这里插入图片描述
    然后在让head位置设置值

  • 新增尾部
    和头部不一样的是,这里是先设置值在取模+1
    在这里插入图片描述

在这里插入图片描述

  • 删除
    删除和新增就相反了,head是取模+,tail是取模-
    在这里插入图片描述
    其他的实现都还好理解

扩容

在新增的时候有一个grow函数,是其扩容的函数。类似
在这里插入图片描述
重点在框的部分
如果小于64则每次+2
如果大于64则每次加倍

实例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/628017.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优化设备管理,提升企业效益——工程设备管理模板的实用价值分析

随着建筑行业的不断发展&#xff0c;建筑企业在施工过程中的各种设备也越来越多&#xff0c;设备的管理已经成为建筑企业发展过程中必须要面对的一个问题。作为低代码开发平台&#xff0c;百数根据建筑业的实际需求搭建了一款工程设备管理系统&#xff0c;从而能够让建筑行业企…

图漾相机—windows- Python SDK(官网下载编译)

文章目录 一、 安装依赖&#xff1a;二. 下载swig和SDK&#xff1a;swig下载连接&#xff1a;[https://www.swig.org/](https://www.swig.org/)下载python SDK下载 Windows Camport3 SDK 三、配置python和swig环境变量编译前&#xff0c;请先&#xff1a;安装 Python。 安装 Nu…

智慧垃圾焚烧发电厂Web3D可视化管理系统

前言 随着我国生产力的飞速发展和经济的迅速崛起&#xff0c;城市生活垃圾作为一种生物质能&#xff0c;将其燃烧用于发电&#xff0c;可以有效节约化石能源。 建设背景 随着城镇化进程加速、人民生活水平持续提升,城市生活垃圾产生量也在逐年增长。生活垃圾是“放错地方的资…

Kuboard

安装 Kuboard 之前&#xff0c;假设&#xff1a; 您已经准备好了一个 Linux 服务器用于安装 Kuboard-V3&#xff0c;并且该机器上的 docker 版本不低于 19.03用于安装 Kuboard v3.x 的机器已经安装了 docker&#xff0c;并且版本不低于 docker 19.03您已经有自己的 Kubernetes…

XXL-JOB任务分片

文章目录 任务类型任务配置路由策略阻塞处理策略&#xff1a; 单个任务和集群任务单机多任务分片集群分片 任务类型 单个任务&#xff1a;一个任务实例便可完成 单机单任务&#xff1a;单机模式下任何路由模式都只有一个实例执行 集群单任务&#xff1a;由路由策略(广播模式除…

接口自动化测试之Fiddler的运用

1.接口介绍&#xff08;基础部分&#xff09; 接口是一种用来定义程序的协议&#xff0c;它描述可属于任何类或结构的一组相关行为应用程序编程接口&#xff0c;它是一些预先定义的函数&#xff0c;目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力接口测…

开源项目合集....

likeshop开源商城系统&#xff0c;公众号商城、H5商城、微信小程序商城、抖音小程序商城、字节小程序商城、头条小程序商城、安卓App商城、苹果App商城代码全开源&#xff0c;免费商用。 适用场景&#xff1a;B2C商城、新零售商城、社交电商商城、分销系统商城、小程序商城、商…

Go单元测试及框架使用

Go自带测试框架 单元测试 建议Go 语言推荐测试文件和源代码文件放在一块&#xff0c;测试文件以 _test.go 结尾。函数名必须以 Test 开头&#xff0c;后面一般跟待测试的函数名参数为 t *testing.T 简单测试用例定义如下&#xff1a; func TestXXXX(t *testing.T) {// ...}…

城市NOA转向BEV,头部Tier 1如何笑傲江湖?

主讲&#xff5c;蒋沁宏 编辑&#xff5c;Amy 编者注&#xff1a; 本文是HiEV出品的系列直播「硬核拆解BEV」第三期问答环节内容整理。商汤绝影量产行车智能驾驶研发负责人蒋沁宏&#xff0c;与连线嘉宾寒武纪行歌自动驾驶总监李想、宏景智驾高级工程经理柴可宁、主持嘉宾周琳…

SpringBoot 源码分析初始化应用上下文(1)-createApplicationContext

前言&#xff1a;springBoot的版本是 2.2.4.RELEASE 一、入口 /*** Run the Spring application, creating and refreshing a new* {link ApplicationContext}.* param args the application arguments (usually passed from a Java main method)* return a running {link A…

2023最新版Java 面试突击手册开源(涵盖 p5-p8 技术栈)

前言: 本文收集整理了各大厂常见面试题N道&#xff0c;你想要的这里都有内容涵盖&#xff1a;Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux 等技术栈&#xff0c;希望大家都能找到适…

【免配置】Qt的mingw使用编译opencv库

【免配置】Qt的mingw_32/64使用编译opencv库 网上在qt中使用mingw编译器配置opencv的时候&#xff0c;通常需要使用cmake编译工具&#xff0c;进行预先编译&#xff0c;步骤比较繁琐&#xff0c;这里推荐一个捷径&#xff0c;直接使用前人编译好的opencv库即可&#xff0c;避免…

软件测试金融项目,在测试的时候一定要避开的一些雷区

软件测试金融项目需要格外谨慎和专注&#xff0c;因为这些项目通常涉及大量的交易、用户隐私和其他敏感信息。以下是一些软件测试金融项目时需要关注的方面&#xff1a; 1. 数据保护 在测试金融项目时&#xff0c;必须确保用户数据和投资信息得到保护。测试人员必须确保测试环…

Flink CDC 实时mysql到mysql

CDC 的全称是 Change Data Capture &#xff0c;在广义的概念上&#xff0c;只要是能捕获数据变更的技术&#xff0c;我们都可以称之为 CDC 。目前通常描述的 CDC 技术主要面向数据库的变更&#xff0c;是一种用于捕获数据库中数据变更的技术。 mysqlcdc需要mysql开启binlog&a…

TCP报文段结构

TCP报文段结构 源端口号和目的端口号&#xff1a;含义从名字就能看出来。 序号和确认号&#xff1a;这二个字段被 TCP 发送方和接收方用来实现可靠数据传输服务&#xff0c;每个字段都是32比特。 接收窗口&#xff1a;该字段用于流量控制&#xff0c;大小为16比特。 首部长度…

VTK学习之vtkProp

vtkProp。渲染场景中数据的可视表达&#xff08;Visible Depictions&#xff09;是由vtkProp的子类负责。 也就是说&#xff0c;数据想要进行可视化显示&#xff0c;需要一个转换过程&#xff0c;这个过程就是转换为vtkProp 这样才能进行渲染展示出来。 而vtkProp子类是vtkA…

一阶电路和二阶电路的时域分析(1)——“电路分析”

小雅兰期末加油冲冲冲&#xff01;&#xff01;&#xff01; 动态电路的方程及其初始条件 动态电路&#xff0c;物理学名词&#xff0c;是指含有储能元件L、C的电路&#xff0c;动态电路方程的阶数通常等于电路中动态元件的个数。 动态电路是指含有储能元件的电路。当动态电路状…

openpnp - 底部相机矫正(subject not found)的原因总结

文章目录 openpnp - 底部相机矫正(subject not found)的原因总结概述问题的由来相机的选择相机焦距的选择相机初始安装距离位置的选择相机安装支柱接触面过大会影响相机模组PCB的安装相机支柱的绝缘问题安装相机模组时的平整度问题相机轴垂直度的问题相机成像时间矫正时的Z轴位…

全球顶尖科学家陈松蹊院士出任百分点数据科学研究院名誉院长

近日&#xff0c;百分点科技正式宣布聘请北京大学数学科学学院、光华管理学院教授&#xff0c;中国科学院院士陈松蹊担任百分点数据科学研究院名誉院长。公司将以此深化布局数据科学领域&#xff0c;助推数字中国建设。 全球顶尖科学家 陈松蹊院士主要从事超高维大数据统计分析…

卷S人的Java岗!全靠这份1000页的面试手册,拿了28K的offer

大家好&#xff0c;最近有不少朋友给鄙人留言&#xff0c;说今年面试实在是太卷了&#xff0c;不知道从何下手&#xff01; 不论是跳槽涨薪&#xff0c;还是学习提升&#xff01;先给自己定一个小目标&#xff0c;然后再朝着目标去努力就完事儿了&#xff01;为了帮大家节约时…