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

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

介绍

双端队列,和前面学的队列和栈的区别在于双端队列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则每次加倍

实例

相关文章:

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

介绍 双端队列&#xff0c;和前面学的队列和栈的区别在于双端队列2端都可以进行增删&#xff0c;其他2个都是只能一端可以增/删。 实现 链表 因为2端都需要可以操作所以我们使用双向链表 我们也需要一共头节点 所以节点设置 static class Node<E>{E value;Node<E…...

网络安全:信息收集专总结【社会工程学】

前言 俗话说“渗透的本质也就是信息收集”&#xff0c;信息收集的深度&#xff0c;直接关系到渗透测试的成败&#xff0c;打好信息收集这一基础可以让测试者选择合适和准确的渗透测试攻击方式&#xff0c;缩短渗透测试的时间。 一、思维导图 二、GoogleHacking 1、介绍 利用…...

Linux 命令总结

基本操作 Linux关机,重启 # 关机 shutdown -h now# 重启 shutdown -r now 查看系统,CPU信息 # 查看系统内核信息 uname -a# 查看系统内核版本 cat /proc/version# 查看当前用户环境变量 envcat /proc/cpuinfo# 查看有几个逻辑cpu, 包括cpu型号 cat /proc/cpuinfo | grep na…...

使用腾讯手游助手作为开发测试模拟器的方案---以及部分问题的解决方案

此文主要介绍使用第三方模拟器(这里使用腾讯手游助手)作为开发工具&#xff0c;此模拟器分为两个引擎&#xff0c;一个与其他模拟器一样基于virtualbox的标准引擎&#xff0c;不过优化不太好&#xff0c;一个是他们主推的aow引擎&#xff0c;此引擎。关于aow没有太多的技术资料…...

牛客网论坛最具争议的Linux内核成神笔记,GitHub已下载量已过百万

原文地址&#xff1a;牛客网论坛最具争议的Linux内核成神笔记&#xff0c;GitHub已下载量已过百万 1、前言 Linux内核是一个操作系统&#xff08;OS&#xff09;内核&#xff0c;本质上定义为类Unix。它用于不同的操作系统&#xff0c;主要是以不同的Linux发行版的形式。Linu…...

docker如何容器迁移(实战)

手把手教你如何做容器迁移 第一步准备数据 假设要迁移一个 mysql 服务&#xff08;docker部署&#xff09;&#xff0c;由于数据库过大&#xff08;超过50 GB&#xff09;&#xff0c;用mysqldump备份和还原则太过耗时&#xff0c;下面尝试拷贝目录的方式来迁移&#xff0c;详…...

Android kotlin序列化之Parcelable详解与使用(二)

一、介绍 注解序列化篇&#xff1a;Android kotlin序列化之Parcelize详解与使用_蜗牛、Z的博客-CSDN博客 通过上一篇注解序列化&#xff0c;我们已了解的kotlin的序列化比Java复杂了很多。而且有好多问题&#xff0c;注解虽好&#xff0c;但是存在一些问题。 一般在大型商业…...

C++ 类设计的实践与理解

前言 C代码提供了足够的灵活性&#xff0c;因此对于大部分工程师来说都很难把握。本文介绍了写好C代码需要遵循的最佳实践方法&#xff0c;并在最后提供了一个工具可以帮助我们分析C代码的健壮度。 1. 尽可能尝试使用新的C标准 到2023年&#xff0c;C已经走过了40多个年头。新…...

循环链表的创建

循环链表的介绍及创建&#xff08;C语言代码实现&#xff09; 点击打开在线编译器&#xff0c;边学边练 循环链表概念 对于单链表以及双向链表&#xff0c;其就像一个小巷&#xff0c;无论怎么样最终都能从一端走到另一端&#xff0c;然而循环链表则像一个有传送门的小巷&…...

如何让GPT的回答令人眼前一亮,不再刻板回复!

我们平常在使用GPT的时候&#xff0c;是否觉得它的回复太过于死板、官方化&#xff0c;特别是用于创作、写论文分析的时候&#xff0c;内容往往让读者提不起兴趣、没有吸引人的地方&#xff0c;甚至有些内容百度都可以搜到。 举个例子&#xff0c;如下图: 问GPT&#xff0c;AI…...

JMeter测试笔记(四):逻辑控制器

引言&#xff1a; 进行性能测试时&#xff0c;我们需要根据不同的情况来设置不同的执行流程&#xff0c;而逻辑控制器可以帮助我们实现这个目的。 在本文中&#xff0c;我们将深入了解JMeter中的逻辑控制器&#xff0c;包括简单控制器、循环控制器等&#xff0c;并学习如何正…...

【计算机组成原理·笔记】I/O接口

I/O接口 概述I/O接口的功能和组成 I/O接口的组成I/O接口的功能 I/O接口类型 按数据传送方式按功能灵活性按通用性按数据传输的控制方式 概述 I/O接口通常是指主机与I/O设备之间设置的硬件电路以及相应的软件控制&#xff0c;主机通过I/O接口和I/O设备相连接。 I/O接口的功…...

MIT6.024学习笔记(二)——图论(1)

学习不是为了竞争和战胜他人&#xff0c;而是为了更好地了解自己和世界。 - 达赖喇嘛 文章目录 图的相关概念涂色问题基础涂色方法&#xff08;贪婪算法&#xff09;证明 二分图匹配问题应用&#xff1a;稳定婚烟问题算法性质及其证明 图的相关概念 图的定义&#xff1a;一组&…...

饼状图使用属性时,使用驼峰命名法

饼状图是使用D3.js等JavaScript库来绘制的&#xff0c;而JavaScript中的属性名通常采用驼峰式命名法&#xff0c;即第一个单词的首字母小写&#xff0c;后面单词的首字母大写&#xff0c;例如fontSize、fontWeight等。而CSS中的属性名采用连字符命名法&#xff0c;即单词之间用…...

使用Spring Boot、Spring Security和Thymeleaf的整合示例

使用Spring Boot、Spring Security和Thymeleaf的整合示例 大纲&#xff1a; 创建Spring Boot项目 集成Thymeleaf作为模板引擎 配置Spring Security实现身份验证和授权 创建登录页面和主页 创建管理员页面和普通用户页面 实现用户角色和权限管理 详细步骤&#xff1a; 创建Sprin…...

Linux--ServerProgramming--(7)IPC

1.管道 2.信号量 2.1 概念 信号量 是一个计数器&#xff0c;用于实现进程间互斥和同步。 信号量的取值可以是任何自然数。 最简单的信号量是只能取 0 和 1 的变量&#xff0c;这也是信号量最常见的一种形式&#xff0c;叫做二进制信号量&#xff08;Binary Semaphore&#…...

最优化理论-KKT定理的推导与实现

目录 一、引言 二、最优化问题的基本概念 三、KKT条件的引入 1. 梯度条件 2. 原始可行性条件 3. 对偶可行性条件 四、KKT定理的表述 五、KKT定理的证明 1. 构造拉格朗日函数 2. 构造拉格朗日对偶函数 3. 推导KKT条件 4. 解释KKT条件 六、KKT定理的应用 七、总结 …...

chatgpt赋能python:Python中引入其他包的指南

Python中引入其他包的指南 Python是一种流行的编程语言&#xff0c;拥有丰富的开源软件包和库。许多Python程序将使用其他包来增强其功能。在本文中&#xff0c;我们将探讨如何在Python项目中使用和引入其他包。 什么是Python包和库&#xff1f; Python包是一组可重复使用的…...

设计模式-组合模式

应用场景 实现规则匹配的逻辑 比如> <,同时支持 and or 多个条件组合 新增一个条件就增加一个实现类 说明 对于这种需要实现规则匹配的逻辑&#xff0c;可以考虑使用策略模式。策略模式可以将不同的算法封装成不同的策略类&#xff0c;让它们可以相互替换&#xff0c;…...

DMBOK知识梳理for CDGA/CDGP——第四章 数据架构(附常考知识点)

关 注ghz“大数据食铁兽”&#xff0c;回复“知识点”获取《DMBOK知识梳理for CDGA/CDGP》常考知识点&#xff08;第四章 数据架构&#xff09; 第四章 数据架构 第四章是CDGA|CDGP考试的重点考核章节之一&#xff0c;分值占比高&#xff0c;知识点比较密集&#xff0c;重点…...

这次终于选对了!降AI率软件深度测评与推荐

2026年真正好用的AI论文降重与改写工具&#xff0c;核心看降重效果、去AI味、格式保留、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 …...

QT----集成onnxRuntime实现图像分类应用实战

1. 环境准备与工具链搭建 在开始构建QTonnxRuntime图像分类应用之前&#xff0c;我们需要先准备好开发环境。这里我推荐使用Windows系统作为开发平台&#xff0c;因为大多数QT开发者都习惯在这个环境下工作。首先需要安装Visual Studio 2019或更高版本&#xff0c;这是编译QT应…...

终极指南:Autoenv如何彻底解决团队开发环境配置难题

终极指南&#xff1a;Autoenv如何彻底解决团队开发环境配置难题 【免费下载链接】autoenv 项目地址: https://gitcode.com/gh_mirrors/aut/autoenv Autoenv是一款强大的目录环境管理工具&#xff0c;能够在您进入包含.env文件的目录时自动执行其中的环境配置&#xff0…...

三相桥式整流电路有源逆变状态的研究:基于Matlab仿真的直流发电机电动系统电能流转关系分析

三相桥式整流电路有源逆变状态 Matlab仿真可写报告 直流发电机电动系统入手&#xff0c;研究电能流转关系&#xff0c;再转入变流器分析交流和直流电之间流转&#xff0c;掌握有源逆变条件。玩过直流电机调速的朋友可能遇到过这样的情况&#xff1a;明明在减速状态&#xff0c;…...

5大核心功能重塑Sketch效率:RenameIt批量命名工具的流程优化实践

5大核心功能重塑Sketch效率&#xff1a;RenameIt批量命名工具的流程优化实践 【免费下载链接】RenameIt Keep your Sketch files organized, batch rename layers and artboards. 项目地址: https://gitcode.com/gh_mirrors/re/RenameIt 在现代UI/UX设计工作流中&#x…...

Webots仿真实战:如何用C语言控制四轮小车实现自动行驶

Webots仿真实战&#xff1a;C语言控制四轮小车自动行驶全攻略 引言 在机器人开发领域&#xff0c;仿真环境的重要性不言而喻。它不仅能大幅降低硬件成本&#xff0c;还能加速开发周期&#xff0c;让开发者专注于算法和控制逻辑的优化。Webots作为一款专业的机器人仿真软件&…...

Stable Diffusion XL 1.0开源大模型教程:灵感画廊app.py核心逻辑解读

Stable Diffusion XL 1.0开源大模型教程&#xff1a;灵感画廊app.py核心逻辑解读 “见微知著&#xff0c;凝光成影。将梦境的碎片&#xff0c;凝结为永恒的视觉诗篇。” 如果你对AI绘画感兴趣&#xff0c;一定听说过Stable Diffusion XL 1.0这个强大的开源模型。但面对复杂的参…...

团队用ai写代码越来越猛但为什么改个功能像在拆炸弹背后是流程断了

最近不少团队反馈&#xff0c;AI Coding 跑得飞快&#xff0c;两周就能堆出新功能&#xff0c;可一旦要改个按钮颜色&#xff0c;整个系统却像在拆炸弹。这种“改功能崩塌”的怪圈&#xff0c;正让许多管理者头疼&#xff1a;明明用了最先进的工具&#xff0c;交付反而更慢了。…...

不止于仿真:用COMSOL LiveLink玩转超声相控阵动态聚焦与参数化扫描

超越静态仿真&#xff1a;COMSOL LiveLink在超声相控阵动态聚焦中的高阶应用 当超声相控阵技术遇上COMSOL的多物理场仿真能力&#xff0c;工程师们便获得了一把打开声波精准操控之门的钥匙。不同于传统静态仿真&#xff0c;动态聚焦与参数化扫描技术让声场控制如同探照灯般灵活…...

IOMMU性能调优全攻略:从基础原理到实战技巧

IOMMU性能调优全攻略&#xff1a;从基础原理到实战技巧 在数据中心和云计算环境中&#xff0c;IOMMU&#xff08;输入输出内存管理单元&#xff09;作为硬件辅助虚拟化的关键技术组件&#xff0c;其性能表现直接影响着整个系统的吞吐量和延迟。对于需要处理高并发I/O负载的场景…...