Java_队列(Queue)详解

目录

前言

队列(Queue)

概念

队列的使用

循环队列

循环队列的构思

代码的实现

双端队列(Deque)

概念

方法

 双端队列的使用


前言

超详细地讲解了循环队列,为什么要有循环队列 , 普通队列 , 双端队列

队列(Queue)

概念

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作的一端称为队头(Head/Front)

先入先出,后入后出  与栈正好相反


 

 跟现实生活中的排队一样:

 

队列的使用

注意:Queue是个接口,在实例化时必须实例化LinkedList的对象,因为LinkedList实现了Queue接口(队列底层是链表实现的)

public static void main(String[] args) {Queue<Integer> q = new LinkedList<>();q.offer(1);q.offer(2);q.offer(3);q.offer(4);q.offer(5); // 从队尾入队列System.out.println(q.size());System.out.println(q.peek()); // 获取队头元素q.poll();System.out.println(q.poll()); // 从队头出队列,并将删除的元素返回if(q.isEmpty()){System.out.println("队列空");}else{System.out.println(q.size());}
}

循环队列

特点以及为什么要有循环队列

循环队列底层是数组,具有内存固定效率高等特点

直接用链表来当队列底层,固然很方便,但我们也知道链表在添加节点的时候需要动态分配内存,这个过程是比较耗费资源和时间的

因此如果我们的队列长度固定,又想要有较高的性能,那么就可以用顺序表示方式的队列(循环队列应运而生)

若用户无法预估队列的具体长度,那么用链队列是比较方便的,因为链表的好处就是可以很方便地添加和删除新的节点

循环队列的构思

代码的实现

OJ题链接:设计循环队列

class MyCircularQueue {private int[] arr;private int left;//队头private int right;//伪队尾,指向浪费的空间  真队尾在伪队尾的前一个public MyCircularQueue(int k) {arr = new int[k+1];//留一个空间 防止满的时候队尾和队头在相同位置 //队尾队头在相同位置时:数组为空//队尾 在 队头 左边一个位置时:数组已满}public boolean enQueue(int value) {//插入一个元素if (isFull()) {return false;}arr[right] = value;right = (right + 1) % arr.length;return true;}public boolean deQueue() {//删除第一个(队列 先进先出)if (isEmpty()) {return false;}left = (left + 1) % arr.length; return true;}public int Front() {//返回队首if (isEmpty()) {return -1;}return arr[left];}public int Rear() {//返回队尾if (isEmpty()) {return -1;}if (right == 0) {//如果right下标为0了则再往前就是数组的最后一个元素return arr[arr.length-1];}return arr[(right-1) % arr.length];//因为我们浪费了一个空间来实现循环队列,所以队尾要往前走一步}public boolean isEmpty() {//队列是否为空if (left == right) {return true;}return false;}public boolean isFull() {//队列是否已满if ((right+1) % arr.length == left) {//看看伪队尾的下一个元素是不是队头return true;}return false;}
}

双端队列(Deque)

概念

双端队列(deque)是指允许两端都可以进行入队和出队操作的队列,deque 是 “double ended queue” 的简称。
那就说明元素可以从队头出队和入队,也可以从队尾出队和入队
 

方法

 双端队列的使用

Deque<Integer> stack = new ArrayDeque<>();//双端队列的线性实现
Deque<Integer> queue = new LinkedList<>();//双端队列的链式实现

具体的使用可以结合上面的方法来用,用法与队列(Queue)一致,在此不再赘述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“做开源犹如养护花朵,花开需要时间”|2023年度总结

你好&#xff0c;我是 Kagol。 2023年已经接近尾声&#xff0c;OpenTiny 从一颗种子&#x1f951;逐渐发芽&#x1f331;、出苗&#x1f33f;、长叶&#x1f343;&#xff0c;希望明年能长成一棵大树&#x1f332;。 回顾 OpenTiny 开源这10个月&#xff0c;我们付出了非常多…

【vue】开发常见问题及解决方案

有一些问题不限于 Vue&#xff0c;还适应于其他类型的 SPA 项目。 1. 页面权限控制和登陆验证页面权限控制 页面权限控制是什么意思呢&#xff1f; 就是一个网站有不同的角色&#xff0c;比如管理员和普通用户&#xff0c;要求不同的角色能访问的页面是不一样的。如果一个页…

MySQL中CASE when 实战

CASE 语法 CASEWHEN condition1 THEN result1WHEN condition2 THEN result2WHEN conditionN THEN resultNELSE result END; 将表中的内容转换为右边的形式&#xff1a; 1、创建表&#xff0c;创建数据 CREATE TABLEchapter10_7 (order_id VARCHAR(255) NULL,price VARCHAR(25…

el-tree lazy懒加载(进阶版)

2023.12.22今天我学习了el-tree如何实现懒加载&#xff0c;效果如&#xff1a; 代码如下&#xff1a; 懒加载的使用不需要用:data <template><div><el-tree:props"props":load"loadNode"lazynode-key"id"show-checkbox/><…

WEB 3D技术 three.js 设置图像随窗口大小变化而变化

本文 我们来讲讲我们图层适应窗口变化的效果 可能这样说有点笼统 那么 自适应应该大家更熟悉 就是 当我们窗口发生变化说 做一些界面调整比例 例如 我们这样一个i项目界面 我们打开 F12 明显有一部分被挡住了 那么 我们可以刷新 这样是正常了 但是 我们将F12关掉 给F12的…

c# OpenCV 检测(斑点检测、边缘检测、轮廓检测)(五)

在C#中使用OpenCV进行图像处理时&#xff0c;可以使用不同的算法和函数来实现斑点检测、边缘检测和轮廓检测。 斑点检测边缘检测轮廓检测 一、斑点检测&#xff08;Blob&#xff09; 斑点检测是指在图像中找到明亮或暗的小区域&#xff08;通常表示为斑点&#xff09;&#…

win11下配置visual studio 2022+PCL1.13.1

第一部分&#xff1a;visual studio2022 安装 vs官网网址如下&#xff1a;https://visualstudio.microsoft.com/zh-hans/vs/ 第一步&#xff1a;我们打开官网链接&#xff0c;按如下操作点击下载免费版本的exe文件 第二步&#xff1a;打开下载目录下的安装文件进行安装&#…

EndNote插入参考文献

下载参考文献格式 复制刚刚下载的文件到endnote安装的位置下的Styles文件 重启endnote&#xff0c;在open style manager中勾选我们的格式 1.知网 下载&#xff0c;上传 可以attach PDF 分组 引用 2.Web of science 打开EndNote后&#xff0c;双击上面这个.ciw文件&#xff0c…

CSS自适应分辨率 amfe-flexible 和 postcss-pxtorem:Webpack5 升级后相关插件和配置更新说明

前言 项目对应的 webpack5 版本如下&#xff1a; npm i webpack5.89.0 -D npm i webpack-cli5.1.4 -D升级插件 说明一下&#xff0c;我更喜欢固定版本号&#xff0c;这样随机bug会少很多&#xff0c;更可控~ npm i postcss-loader6.1.1 -D npm i postcss-pxtorem6.0.0 -D配…

吴恩达RLHF课程笔记

1.创建偏好数据集 一个prompt输入到LLM后可以有多个回答&#xff0c;对每个回答选择偏好 比如{prompt,answer1,answer2,prefer1} 2.根据这个数据集&#xff08;偏好数据集&#xff09;&#xff0c;创建reward model&#xff0c;这个model也是一个LLM,并且它是回归模型&#…

机器学习---推荐系统案例(二)

四、推荐系统---模型训练 1、模型训练代码 模型训练代码参照scala文件&#xff1a;Recommonder.scala 1.Logger.getLogger("org.apache.spark").setLevel(Level.ERROR) 2.val conf new SparkConf().setAppName("recommonder").setMaster("local[*…

虾皮开通:如何在虾皮上开通跨境电商店铺

在当今的数字时代&#xff0c;跨境电商已经成为了全球贸易的一种重要形式。虾皮&#xff08;Shopee&#xff09;作为东南亚市场份额第一的跨境电商平台&#xff0c;为卖家提供了广阔的销售机会。如果您想在虾皮上开通店铺&#xff0c;以下是一些步骤和注意事项供您参考。 先给…