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

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

😽个人主页: tq02的博客_CSDN博客-C语言,Java,Java数据结构领域博主

🌈梦的目标:努力学习,向Java进发,拼搏一切,让自己的未来不会有遗憾。

🎁欢迎各位→点赞👍 + 收藏⭐ + 评论📝+关注✨

 本章讲解内容:循环队列 的讲解     →栈与队列的讲解


2599d52029914d5ebd34c60061a95b3f.jpg


 使用编译器:IDEA

一.循环队列概念

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


image.png

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

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

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


二.队满和队空的情况


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


image.png


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


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


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


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


image.png




结论:队列空: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;
    }
}


总结


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

目录
相关文章
|
9天前
|
IDE Java 关系型数据库
Java 初学者学习路线(含代码示例)
本教程为Java初学者设计,涵盖基础语法、面向对象、集合、异常处理、文件操作、多线程、JDBC、Servlet及MyBatis等内容,每阶段配核心代码示例,强调动手实践,助你循序渐进掌握Java编程。
94 3
|
12天前
|
安全 Java 应用服务中间件
Spring Boot + Java 21:内存减少 60%,启动速度提高 30% — 零代码
通过调整三个JVM和Spring Boot配置开关,无需重写代码即可显著优化Java应用性能:内存减少60%,启动速度提升30%。适用于所有在JVM上运行API的生产团队,低成本实现高效能。
92 3
|
12天前
|
Java
怎么用Java 代码示例来展示继承的实现
本文通过Java代码示例展示继承机制:Animal为父类,Cat和Dog继承其属性与方法,并实现构造函数调用、方法重写与特有功能扩展,体现代码复用与多态特性。
54 4
|
27天前
|
Java API 开发工具
【Azure Developer】Java代码实现获取Azure 资源的指标数据却报错 "invalid time interval input"
在使用 Java 调用虚拟机 API 获取指标数据时,因本地时区设置非 UTC,导致时间格式解析错误。解决方法是在代码中手动指定时区为 UTC,使用 `ZoneOffset.ofHours(0)` 并结合 `withOffsetSameInstant` 方法进行时区转换,从而避免因时区差异引发的时间格式问题。
139 3
|
13天前
|
Java
java入门代码示例
本文介绍Java入门基础,包含Hello World、变量类型、条件判断、循环及方法定义等核心语法示例,帮助初学者快速掌握Java编程基本结构与逻辑。
197 0
|
2月前
|
人工智能 监控 安全
智慧工地解决方案,java智慧工地程序代码
智慧工地系统融合物联网、AI、大数据等技术,实现对施工现场“人、机、料、法、环”的全面智能监控与管理,提升安全、效率与决策水平。
|
3月前
|
Java 数据安全/隐私保护
快手小红书抖音留痕工具,自动留痕插件工具,java代码开源
这个框架包含三个核心模块:主操作类处理点赞评论、配置管理类和代理管理类。使用时需要配合
|
3月前
|
Java 机器人 API
tiktok群控脚本,养号关注私信点赞脚本插件,java代码分享
这个代码模拟了一个社交机器人的基本行为模式,包括登录、关注、点赞、私信等操作。请注意
|
2月前
|
算法 IDE Java
Java 项目实战之实际代码实现与测试调试全过程详解
本文详细讲解了Java项目的实战开发流程,涵盖项目创建、代码实现(如计算器与汉诺塔问题)、单元测试(使用JUnit)及调试技巧(如断点调试与异常排查),帮助开发者掌握从编码到测试调试的完整技能,提升Java开发实战能力。
272 0

热门文章

最新文章