循环队列讲解,以及Java实现代码

news/2025/2/7 16:54:05/

目录

一.循环队列概念

二.队满和队空的情况 

 三.代码的实现

总结



😽个人主页: tq02的博客_CSDN博客-C语言,Java,Java数据结构领域博主
 🌈梦的目标:努力学习,向Java进发,拼搏一切,让自己的未来不会有遗憾。
 🎁欢迎各位→点赞👍 + 收藏⭐ + 评论📝+关注✨
  本章讲解内容:循环队列 的讲解     →栈与队列的讲解

  使用编译器:IDEA

一.循环队列概念

        在学习循环队列前,我们应该学会队列知识,知识可查看: 队列的知识 。循环队列可以理解为一个圆圈,首尾相连。

 解析,top为队头,rear为队尾。

元素进队时,赋值给rear指针的区域,然后rear指针移动到下一区域。                       

元素出队时,top指针向前移动一位。


二.队满和队空的情况 

队空:队列里无元素的情况,也就是还未有元素进队列,又或者元素全部出队。

 图一,循环队列中并无元素,当top和rear共同指向时,无元素,为队空

 图二, 同样top和rear指针相遇,可是循环队列中却全有元素。

注:因此为区别这两种情况,规定循环队列最多只能有MaxSize-1个队列元素,当循环队列中只剩下一个空存储单元时,队列就已经满了。

 队满情况:当循环队列中只剩下一个空存储单元时,队列就已经满了。如下图

结论队列空:front==rear;            队列满:(rear+1)%N==front;

        队列元素个数:(rear – front + N)%N         N为队列长度、front为头结点、rear为尾结点


 三.代码的实现

 我们使用数组实现循环队列。

class ArrayQueue1 {private int MaxSize; //数组长度private int front;    //头结点private int rear;    //尾结点private int[] arr;//创建队列的构造器public ArrayQueue1(int maxSize) {MaxSize = maxSize;arr = new int[maxSize];front = 0;rear = 0;}public boolean isFull() {return (rear + 1) % MaxSize == front;}public boolean isEmpty() {return front == rear;}public void addQueue(int n) {//判断队列满if (isFull()) {System.out.println("队列满,不能加入数据");return;}arr[rear] = n;rear = (rear + 1) % MaxSize;}// 获取队列的数据public int getQueue() {if (isEmpty()) {return -1;}// front 指向队列的第一个元素// front 后移int value = arr[front];front = (front + 1) % MaxSize;return value;}//显示队列的所有数据public void showQueue() {//遍历if (isEmpty()) {System.out.println("队列为空");return;}// 从front开始遍历for (int i = front; i < front + size(); i++) {System.out.printf("arr[%d]=%d\n", i % MaxSize, arr[i % MaxSize]);}}// 显示队列的头数据,不是取出数据public int headQueue() {if (isEmpty()) {System.out.println("队列为空");return;}return arr[front];}//求出当前队列有效数据public int size() {return (rear + MaxSize - front) % MaxSize;}
}

总结

       循环队列很简单,相当于一条队伍围成一个圈。关键在于求队列长度、队列是否满、是否为空时,求算方法不同。


http://www.ppmy.cn/news/85592.html

相关文章

扑克牌大小OJ题

题目链接 扑克牌大小_牛客题霸_牛客网 题目完整代码 #include <iostream> #include<string> #include<algorithm> using namespace std;// left_str 左边牌 // right_str 右边牌// left_count 左边牌数 // right_count 右边牌数// left_first 左边第一个牌…

linux升级openssh到9.3p1之后,找不到ssh-copy-id命令

通过rpm升级openssh到9.3p1之后&#xff0c;高版本的openssh-clinet已经没有ssh-copy-id命令&#xff0c;对于用此命令做免密登陆&#xff0c;不是很方便。 如果使用openssh9.3p1源码的话&#xff0c;解压之后&#xff0c;会在openssh-9.3p1/contrib下生产ssh-copy-id文件 直…

2009.03-2022.06华证ESG季度评级(季度)

2009.03-2022.06华证ESG评级&#xff08;季度&#xff09; 1、时间&#xff1a;2009.03-2022.06.15 2、来源&#xff1a;整理自Wind 3、指标&#xff1a;华证ESG&#xff08;只有综合评级&#xff0c;无细分评级数据&#xff09; 4、样本数量&#xff1a;A股4800多家公司 …

Java内存模型的抽象结构 JMM

并发编程模型的两个关键问题 线程之间如何通信及线程之间如何同步。 线程之间如何通信&#xff1a;共享内存&#xff0c;消息传递线程之间如何同步通信是指线程之间以何种机制来 交换信息同步是指程序中用于控制不同线程间 操作发生相对顺序 的机制在共享内存的并发模型里&a…

Linux进程同步机制-Futex

引子 在编译2.6内核的时候&#xff0c;你会在编译选项中看到[*] Enable futex support这一项&#xff0c;上网查&#xff0c;有的资料会告诉你"不选这个内核不一定能正确的运行使用glibc的程序"&#xff0c;那futex是什么&#xff1f;和glibc又有什么关系呢&#xff…

六级备考24天|CET-6|翻译技巧3|翻译2020年6月真题红楼梦|逻辑问题|理解背诵|20:50~22:30

目录 一、逻辑重建 例句1 例句2 例句3 二、定语和状语 定语的翻译原则 什么是状语&#xff1f; 状语位置 状语的基本形式 三、主动和被动 四、无主句 五、并列和连动 连动 六、作题步骤 七、红楼梦 PRACTICE ANSWER​ 时态问题 一、逻辑重建 试比较&#xff1a; 1. 下雨了…

Hyperledger Fabric explorer区块链浏览器搭建

https://github.com/hyperledger-labs/blockchain-explorer 官方浏览器的github地址 根据文档&#xff0c;采用docker容器的方法搭建explorer。 首先创建explorer的项目&#xff0c; mkdir explorer根据官方提供的文件&#xff0c;需要创建的目录结构如下&#xff1a; 这是官…

如何快速实现一个rpa

RPA&#xff0c;也就是机器人流程自动化&#xff0c;主要是用来自动化一些日常、重复性的工作。它可以被视为一种软件机器人&#xff0c;可以模拟人类在计算机或者数字系统中的行为。 如果你想要快速实现一个RPA&#xff0c;以下是一些基本步骤&#xff1a; 定义你的需求&…