循环队列讲解,以及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;
    }
}


总结


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

目录
相关文章
|
7天前
|
搜索推荐 Java 索引
|
7天前
|
搜索推荐 Java 索引
|
7天前
|
搜索推荐 Java 索引
|
1天前
|
数据可视化 Java
使用ChatGPT实现可视化操作扫雷小游戏 【java代码实现】
这篇文章介绍了使用Java语言和Swing框架实现的扫雷小游戏的详细代码和实现过程。
使用ChatGPT实现可视化操作扫雷小游戏 【java代码实现】
|
1天前
|
前端开发 IDE Java
"揭秘前端转Java的秘径:SpringBoot Web极速入门,掌握分层解耦艺术,让你的后端代码飞起来,你敢来挑战吗?"
【8月更文挑战第19天】面向前端开发者介绍Spring Boot后端开发,通过简化Spring应用搭建,快速实现Web应用。本文以创建“Hello World”应用为例,展示项目基本结构与运行方式。进而深入探讨三层架构(Controller、Service、DAO)下的分层解耦概念,通过员工信息管理示例,演示各层如何协作及依赖注入的使用,以此提升代码灵活性与可维护性。
|
3天前
|
Java 开发者
Java中的Lambda表达式:简化你的代码之旅
【8月更文挑战第17天】 在编程的海洋中,简洁是航行的风帆。Lambda表达式,作为Java 8的一大亮点,为开发者提供了一种更为紧凑、易读的编码方式。本篇文章将带你领略Lambda表达式的魅力,从基础概念到实际应用,让你的代码像诗句一样流畅。
14 4
|
1天前
|
设计模式 算法 安全
Java编程中的设计模式:提升代码的可维护性和扩展性
【8月更文挑战第19天】在软件开发的世界里,设计模式是解决常见问题的一种优雅方式。本文将深入探讨Java编程语言中常用的几种设计模式,并解释如何通过这些模式来提高代码的可维护性和扩展性。文章不涉及具体的代码实现,而是侧重于理论和实践相结合的方式,为读者提供一种思考和改善现有项目的新视角。
|
1天前
|
设计模式 Java
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
文章提供了一份常用设计模式的全面介绍,包括创建型模式、结构型模式和行为型模式。每种设计模式都有详细的概念讲解、案例说明、代码实例以及运行截图。作者通过这些模式的介绍,旨在帮助读者更好地理解源码、编写更优雅的代码,并进行系统重构。同时,文章还提供了GitHub上的源码地址,方便读者直接访问和学习。
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
|
2天前
|
Java 开发者
在Java编程的广阔天地中,if-else与switch语句犹如两位老练的舵手,引领着代码的流向,决定着程序的走向。
在Java编程中,if-else与switch语句是条件判断的两大利器。本文通过丰富的示例,深入浅出地解析两者的特点与应用场景。if-else适用于逻辑复杂的判断,而switch则在处理固定选项或多分支选择时更为高效。从逻辑复杂度、可读性到性能考量,我们将帮助你掌握何时选用哪种语句,让你在编程时更加得心应手。无论面对何种挑战,都能找到最适合的解决方案。
6 1
|
7天前
|
搜索推荐 Java