双端队列(基于链表与数组)

目录

基于链表实现:基于双向环形链表的双端队列

基于数组实现:循环数组

分析:


基于链表实现:基于双向环形链表的双端队列

package LinkedListDeque;
//基于双向环形链表的双端队列import org.w3c.dom.Node;import java.util.Iterator;public class LinkedListDeque<E> implements Qeque<E>, Iterable<E> {//节点类static class Node<E>{Node<E> prev;E value;Node<E> next;public Node(Node<E> prev, E value, Node<E> next){this.prev=prev;this.value=value;this.next=next;}}int capacity;int size;Node <E> sentinel=new Node<>(null,null,null);public LinkedListDeque(int capacity){this.capacity=capacity;sentinel.next=sentinel;sentinel.prev=sentinel;}//向队列头部添加元素  a added b@Overridepublic boolean offerFirst(E e) {if(isFull()){return false;}Node<E> a=sentinel;Node<E> b = sentinel.next;Node<E> added = new Node(a, e, b);a.next = added;b.prev=added;size++;return true;}//向队列尾部添加元素 a added b@Overridepublic boolean offerLast(E e) {if(isFull()){return false;}Node<E> a=sentinel.prev;Node<E> b = sentinel;Node<E> added = new Node(a, e, b);a.next = added;b.prev=added;size++;return true;}@Overridepublic E pollFirst() {if(isEmpty()){return null;}Node<E> a=sentinel;Node<E> first=sentinel.next;Node<E> b=first.next;a.next=b;b.prev=a;size--;return first.value;}@Overridepublic E pollLast() {if(isEmpty()){return null;}Node<E> b=sentinel;Node<E> last=sentinel.prev;Node<E> a=last.prev;a.next=b;b.prev=a;size--;return last.value;}@Overridepublic E peekFirst() {if(isEmpty()){return null;}return sentinel.next.value;}@Overridepublic E peekLast() {if(isEmpty()){return null;}return sentinel.prev.value;}//判断队列是否为空@Overridepublic boolean isEmpty() {return size==0;}//判断队列是否已满@Overridepublic boolean isFull() {return size==capacity;}//迭代器@Overridepublic Iterator<E> iterator() {return new Iterator<E>(){Node<E> p=sentinel.next;public boolean hasNext(){return p!=sentinel;}public E next(){E value=p.value;p=p.next;return value;}};}
}

基于数组实现:循环数组

分析:

  /** h head* t tail      h* 0  1  2  3  4  5* a  b  t     d  c* offerLast  先添加元素在tail++* offerFirst  先head--,再添加元素*
//    head==tail 表示空// head==(tail+1)%size 表示满** pollFirst()  先获取值,再head++* pollLast() 先tail--,再获取值*/
package ArrayDeque;import java.util.Iterator;
//循环数组public class ArrayDeque1<E> implements Qeque<E>, Iterable<E> {private int head,tail;private E[] array;public ArrayDeque1(int capacity) {array= (E[]) new Object[capacity+1];//空与满不一样      }@Overridepublic boolean offerFirst(E e) {if(isFull()){return false;}head=(head-1+array.length)%array.length;array[head]=e;return true;}@Overridepublic boolean offerLast(E e) {if(isFull()){return false;}array[tail]=e;tail=(tail+1)%array.length;return true;}@Overridepublic E pollFirst() {if(isEmpty()){return null;}E value=array[head];head=(head+1)%array.length;return value;}@Overridepublic E pollLast() {if(isEmpty()){return null;}tail=(tail-1+array.length)%array.length;return array[tail];}@Overridepublic E peekFirst() {if(isEmpty()){return null;}return array[head];}@Overridepublic E peekLast() {if(isEmpty()){return null;}int index=(tail-1+array.length)%array.length;return array[index];}@Overridepublic boolean isEmpty() {return head==tail;}@Overridepublic boolean isFull() {return head==(tail+1)%array.length;}@Overridepublic Iterator<E> iterator() {return new Iterator<E>() {int p=head;@Overridepublic boolean hasNext() {return p!=tail;}@Overridepublic E next() {E e=array[p];p=(p+1)%array.length;return e;}};}
}

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

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

相关文章

营销邮件策略:提升打开率和转化率的技巧!

营销邮件的发送技巧有哪些&#xff1f;如何提高营销邮件召唤力&#xff1f; 随着邮件数量的激增&#xff0c;如何确保您的营销邮件能够脱颖而出&#xff0c;提升打开率和转化率&#xff0c;成为了每个营销人员必须面对的挑战。MailBing将深入探讨一系列有效的营销邮件策略&…

libaom 源码分析:帧间运动矢量预测

AV1 帧间运动矢量预测原理 运动矢量可以被相邻块预测,这些相邻块可以是空域相邻块,或位于参考帧中的时域相邻块;通过检查所有这些块,将确定一组运动矢量预测器,并用于编码运动矢量信息。空域运动矢量预测 两组空域相邻块可以被利用寻找空域 MV 预测器,第一组包括当前块的…

轮播图【HTML+CSS+JavaScript】

给大家分享一个很好看的轮播图&#xff0c;这个也是之前看到别人写的效果感觉很好看&#xff0c;所以后面也自己实现了一下&#xff0c;在这里分享给大家&#xff0c;希望大家也可以有所收获 轮播图效果&#xff1a; 视频效果有点浑浊&#xff0c;大家凑合着看&#xff0c;大家…

OneRestore: A Universal Restoration Framework for Composite Degradation 论文阅读笔记

这是武汉大学一作单位的一篇发表在ECCV2024上的论文&#xff0c;文章代码开源&#xff0c;文章首页图如下所示&#xff0c;做混合图像干扰去除&#xff0c;还能分别去除&#xff0c;看起来很牛逼。文章是少见的做混合图像干扰去除的&#xff0c;不过可惜只包含了3种degradation…

基于Springboot的任务发布平台设计与实现(源码齐全+调试)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。你想解决的问题&#xff0c;今天给大家介绍…

centos7 kafka高可用集群安装及测试

前言 用三台虚拟机centos7 搭建高可用集群&#xff0c;及测试方法 高可用搭建的方法&#xff0c;参考&#xff1a;https://blog.csdn.net/u011197085/article/details/134070318 高可用搭建 1、安装配置zookeeper集群 下载zookeeper 注&#xff1a;zookeeper链接如果失效&a…

30条勒索病毒处置原则

当前&#xff0c;勒索病毒在全球范围内肆虐&#xff0c;成为企业数据资产安全的头号威胁。这些狡猾的恶意软件&#xff0c;如同网络空间中的幽灵&#xff0c;不断寻找并利用系统的漏洞&#xff0c;通过加密数据或窃取敏感信息&#xff0c;向企业索取高额赎金。一旦感染&#xf…

推荐一款业内领先的建模工具:SAP PowerDesigner

SAP PowerDesigner是一款业内领先的建模工具&#xff0c;帮助您改进商务智能&#xff0c;打造更卓越的信息架构。通过该软件的元数据管理功能&#xff0c;可以构建关键信息资产的 360 度全方位视图&#xff0c;从而使数据管理、BI、数据集成和数据整合工作大获裨益。其分析功能…

6本SCI/SSCI被解除「On Hold」, 重新回归, 单位如何认定?还能投吗?

【SciencePub学术】截止至2024年10月&#xff0c;被WOS数据标记的on hold 期刊&#xff0c;共计25本&#xff0c;其中已有6本解除on hold, 重回SCI,SSCI。今天小编就带大家盘点这些“出狱”期刊情况&#xff0c;分析一下这些期刊是否还能投&#xff0c;值得投&#xff1f; 01In…

Linux下GCC编译器的安装

Linux下GCC编译器的安装 以下所有的版本都可以在https://gcc.gnu.org/pub/gcc/infrastructure/这里找最新的 通过apt-get方式下载的Qt5.9的gcc编译器版本只是4.8.3&#xff0c;无法打开一些Qt5的库头文件&#xff0c;所以准备在Llinux下再安装一个gcc5.3.0。 查看gcc版本 ubu…

【Linux】

软件包管理器 yum yum类似应用商店客户端&#xff0c;有人已经把软件写好放在服务器上了&#xff0c;通过yum找到服务器上的软件下载 软件操作 yum list 可以显示所有可下载软件&#xff0c;我们要找lrzsz软件 yum install 下载 yum remove 卸载 yum源 yum下载软件是通过…

【论文复现】基于图卷积网络的轻量化推荐模型

本文所涉及所有资源均在这里可获取。 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff0c;喜爱音乐、摄影的一位博主。 &#x1f4d7;本文收录于论文复现系列&#xff0c;大家有兴趣的可以看一看…

天命人开店日记之门店经营调研(下)

在调研前拟定了一些想要去了解的信息&#xff0c;包括&#xff1a;月销量、净利润、用户购买的主要担忧、与电商平台的竞争差异等关键内容&#xff0c;然而当自己去实地考察线下门店时&#xff0c;确发现实际情况与自己的预期相差非常大。大大出乎预料的包括三方面&#xff1a;…

桑基图在医学数据分析中的更复杂应用示例

桑基图&#xff08;Sankey Diagram&#xff09;能够有效地展示复杂的流动关系&#xff0c;特别适合用于医学数据分析中的多种转归和治疗路径的可视化。接下来&#xff0c;我们将构建一个稍微复杂的示例&#xff0c;展示不同疾病患者在治疗过程中的流动&#xff0c;以及他们的治…

【linux】再谈网络基础(一)

1. 再谈 "协议" 协议是一种 "约定"&#xff0c;在读写数据时, 都是按 "字符串" 的方式来发送接收的. 但是这里我们会遇到一些问题&#xff1a; 如何确保从网上读取的数据是否是完整的&#xff0c;区分缓冲区中的由不同客户端发来的数据 2. 网…

基于CNN-RNN的影像报告生成

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【PaddleNLP的FAQ问答机器人】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

【AI落地应用实战】构建基于知识图谱的知识问答系统

一、知识图谱概述 知识图谱&#xff08;Knowledge Graph&#xff09;是一种结构化的语义知识库&#xff0c;它以图形的方式组织和整合信息&#xff0c;使得数据之间的关系变得直观和易于理解。知识图谱的概念融合了计算机科学、数据科学、人工智能等多个领域的技术&#xff0c…

微积分复习笔记 Calculus Volume 1 - 4.8 L’Hôpital’s Rule

4.8 L’Hpital’s Rule - Calculus Volume 1 | OpenStax

AI辅助论文写作的利弊

人工智能的时代&#xff0c;AI从自动驾驶到智能家居&#xff0c;慢慢的都成为了我们生活中的一部分。可当AI被放到学术研究领域&#xff0c;特别是撰写论文这一问题上时&#xff0c;却出现了大量的争议&#xff0c;认为AI撰写论文会削弱该有的批判性思维能力。那不用AI撰写论文…

AOP详解

一.什么是 AOP&#xff1f; AOP 的目的是将横切关注点&#xff08;如日志记录、事务管理、权限控制、接口限流、接口幂等等&#xff09;从核心业务逻辑中分离出来&#xff0c;通过动态代理、字节码操作等技术&#xff0c;实现代码的复用和解耦&#xff0c;提高代码的可维护性和…