队列基础知识-Java

news2024/11/15 21:35:35

基本概念

队列(Queue)是一个有序的元素集合,其中新元素总是被添加到队尾,而删除操作则发生在队头。 这种特性使得队列成为一种线性数据结构,其操作遵循FIFO(先入先出)原则。

图解

环形队列注意点:

1 有效元素区间为[frount,rear)

2 判断为空:front == rear

3 判断为满:(rear + 1) % 队列长度 == front

基本操作

入队(addQueue):在队尾添加一个新元素。

出队(getQueue):从队头删除一个元素。

队列长度(size):返回队列中当前元素的数量。

判断队列是否为空(isEmpty):检查队列是否为空,如果为空则返回true,否则返回false。

判断队列是否已满(isFull):检查队列是否已满,如果已满则返回true,否则返回false。

展示队列中的内容(showQueue)。

代码演示

class CircleArrayQueue_ {
    private int maxSize; // 表示数组最大容量
    private int frount;
    // frount 变量的含义:frount 就指向队列的第一个元素,也就是arr[frount]
    private int rear;
    // rear 队列尾 指向队列最后一个元素的下一个位置,
    private int[] arr;
    public CircleArrayQueue_(int arrMaxSize) {
        maxSize = arrMaxSize;
        arr = new int[maxSize];
    }

    public boolean isFull() {
        return (rear + 1) % maxSize == frount;
    }

    public boolean isEmpty() {
        return rear == frount;
    }

    // 增加数据到队列
    public void addQueue(int n ) {
        if (isFull()) {
            System.out.println("队列已满,不能添加数据!");
            return;
        }
        arr[rear] = n;
        rear = (rear + 1 )% maxSize;
    }

    //取出队列中的数据
    public int getQueue() {
        if (isEmpty()) {
            throw new RuntimeException("队列空,不能取出数据!");
        }
        int value = arr[frount];
        frount = (frount + 1) % maxSize;
        return value;
    }
    // 显示队列数据
    public void showQueue() {
        if (isEmpty()) {
            System.out.println("队列空的,没有数据!");
        }
        for (int i = frount; i < size(); frount++) {
            System.out.println(arr[i]);
        }
    }
    public int size() {
        return (rear + maxSize - frount) % maxSize;
    }
}

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

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

相关文章

代码随想录算法训练营第54天|卡码网 110. 字符串接龙、105.有向图的完全可达性、106.岛屿的周长

1. 卡码网 110. 字符串接龙 题目链接&#xff1a;https://kamacoder.com/problempage.php?pid1183 文章链接&#xff1a;https://www.programmercarl.com/kamacoder/0110.字符串接龙.html 思路&#xff1a; 本题只需要求出最短路径的长度就可以了&#xff0c;不用找出具体路径…

解决面板安装Node.js和npm后无法使用的问题

使用面板&#xff08;BT&#xff09;安装Node.js和npm后&#xff0c;可能会遇到如下问题&#xff1a;即使成功安装了Node.js和npm&#xff0c;服务器仍提示“未安装”&#xff0c;在命令行中使用 node -v 或 npm -v 也没有任何响应。这种问题通常是由于环境变量配置错误或路径问…

Matlab中BaseZoom()函数实现曲线和图片的局部放大

BaseZoom工具下载链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1yItVSinh6vU4ImlbZW6Deg?pwd9dyl 提取码&#xff1a;9dyl 下载完之后将工具包放置合适的路径下&#xff0c;并在matlab中“设置路径”中添加相应的路径&#xff1b; 注&#xff1a;可以先运行如…

【C++ Primer Plus习题】12.2

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream> #include "String.h"…

指针与一维数组

对于数组元素的访问&#xff0c;可以使用下标&#xff0c;也可以使用指针变量&#xff0c;移动指针可以指向数组中的任意一个元素。 例如&#xff0c;一维数组和指针的如下定义 int a [5] {1,2,3,4,5},*p;p a; 因为p是指向一维数组的首元素的指针。因此上述关系等价于 int…

第三天旅游线路规划

第三天&#xff1a;从贾登峪到禾木风景区&#xff0c;晚上住宿贾登峪&#xff1b; 从贾登峪到禾木风景区入口&#xff1a; 1、行程安排 根据上面的耗时情况&#xff0c;规划一天的行程安排如下&#xff1a; 1&#xff09;早上9&#xff1a;00起床&#xff0c;吃完早饭&#…

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录 [web][极客大挑战 2019]Http 考点&#xff1a;Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点&#xff1a;弱密码字典爆破 四种方法&#xff1a; [web][极客大挑战 2019]Http 考点&#xff1a;Referer协议、UA协议、X-Forwarded-For协议 访问…

matlab读取NC文件(含group)

matlab读取NC文件&#xff08;含group&#xff09;&#xff1a; NC文件数据结构&#xff1a; 代码&#xff1a; % 打开 NetCDF 文件 filename your_file.nc; % 替换为你的文件名% 使用 netcdf.open 函数打开文件 ncid netcdf.open(filename, NC_NOWRITE);% 查看文件中的组 …

JAVA - 关于防重复提交探讨

1、前端提交按钮做单次点击 2、后端接收判断请求的数据包&#xff0c;生成唯一key存redis&#xff0c;设置几秒的过期时间&#xff08;缺陷&#xff1a;带时间戳的数据&#xff0c;需要做些逻辑判断&#xff09; 3、后端代码逻辑redis分布式锁&#xff08;缺陷&#xff1a;re…

说一下解除docker限制内存警告

有时候docker要对容器使用的内存做出限制&#xff0c;通常的做法是使用参数 -m 例如&#xff1a; docker run -m 512M表示容器内存最大不能超过512M。 但这样做&#xff0c;在ubuntu会看到以下警告 WARNING: Your kernel does not support swap limit capabilitiesdocker官方…

ELK笔记

要搞成这样就需要钱来买服务器 开发人员一般不会给服务器权限&#xff0c;不能到服务器上直接看日志&#xff0c;所以通过ELK看日志。不让开发登录服务器。即使你查出来是开发的问题&#xff0c;费时间&#xff0c;而且影响了业务了&#xff0c;就是运维的问题 开发也不能登录…

从零开始学习JVM(七)- StringTable字符串常量池

1 概述 String应该是Java使用最多的类吧&#xff0c;很少有Java程序没有使用到String的。在Java中创建对象是一件挺耗费性能的事&#xff0c;而且我们又经常使用相同的String对象&#xff0c;那么创建这些相同的对象不是白白浪费性能吗。所以就有了StringTable这一特殊的存在&…

用EA和SysML一步步建模(05)使命声明-解构需求01

用EA和SysML一步步建模的操作指南&#xff08;01&#xff09; 用EA和SysML一步步建模&#xff08;02&#xff09;导入ISO-80000 用EA和SysML一步步建模&#xff08;03&#xff09;创建包图和包的关系 用EA和SysML一步步建模&#xff08;04&#xff09;创建“需求组织”包图 …

【PHPStudy搭建Pikachu靶场】自定义网站站点和mysql端口本地搭建Pikachu靶场

文章目录 1. 下载phpstudy和pikaqu源码2. 打开phpstudy&#xff0c;启用apache和mysql3. Phpstudy用自定义的82端口创建网站4. 创建数据库5. 修改apache的端口和网站根目录6. 修改mysql的端口和服务序列号7. 用浏览器打开靶场8. 修改pikachu的config.inc.php文件9. 在浏览器上打…

一些硬件知识(十八)

两个信号PIN之间串接电阻的作用&#xff1a; 1.阻抗匹配 2.吸收反射 3.防止程序异常导致两个IO都是输出的时候短路 尤其针对下图中的信号&#xff1a; 清理穿越机电机中的灰尘&#xff0c;可以用密封胶泥的办法&#xff1a; 一定要小心垫片的掉落&#xff1a; 20块左右的快充充…

魔术方法介绍

目录 一、基本介绍 1、什么是魔术方法 2、常见的魔术方法 二、__str__ 1、基本介绍 2、应用实例&#xff1a;请输出Monster对象的属性信息 三、__eq__ 1、基本介绍 2、应用实例 四、其它几个魔术方法 1、其它魔术方法 2、应用实例 参考文档&#xff1a;3. 数据模型…

SOMEIP_ETS_096: SD_Check_TCP_Connection_before_SubscribeEventgroup

测试目的&#xff1a; 验证DUT&#xff08;Device Under Test&#xff09;在未事先建立TCP连接的情况下&#xff0c;对于包含TCP端点选项的SubscribeEventgroup请求&#xff0c;能够拒绝该请求并发送SubscribeEventgroupNAck。 描述 本测试用例旨在确保DUT遵循SOME/IP协议&a…

堆排序Java

思路 这个代码还不错 https://blog.csdn.net/weixin_51609435/article/details/122982075 就是从下往上进行调整 1. 如何将数组映射成树 对于下面这颗树&#xff0c;原来的数组是&#xff1a; 好&#xff0c;如果调整的话&#xff0c;我们第一个应该调整的是最下边&#x…

JVM面试真题总结(三)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 解释-下Full GC? Full GC&#xff0c;也被称为Major GC&#xff…

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操…