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

目录

一.循环队列概念

二.队满和队空的情况 

 三.代码的实现

总结



😽个人主页: 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;
    }
}

总结

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

  • 37
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 31
    评论
循环队列是一种常见的数据结构,它可以在固定大小的数组实现队列的基本操作。以下是C++中循环队列的基本操作实现代码: ```c++ #include <iostream> using namespace std; const int MAXSIZE = 100; // 循环队列的最大容量 class CircularQueue { private: int front; // 队头指针 int rear; // 队尾指针 int data[MAXSIZE]; // 存储队列元素的数组 public: CircularQueue() { // 构造函数,初始化队头和队尾指针 front = rear = 0; } bool isEmpty() { // 判断队列是否为空 return front == rear; } bool isFull() { // 判断队列是否已满 return (rear + 1) % MAXSIZE == front; } bool enqueue(int x) { // 入队操作 if (isFull()) { return false; // 队列已满,入队失败 } data[rear] = x; // 将元素插入队尾 rear = (rear + 1) % MAXSIZE; // 队尾指针后移 return true; // 入队成功 } bool dequeue(int &x) { // 出队操作 if (isEmpty()) { return false; // 队列为空,出队失败 } x = data[front]; // 取出队头元素 front = (front + 1) % MAXSIZE; // 队头指针后移 return true; // 出队成功 } }; int main() { CircularQueue q; int x; q.enqueue(1); q.enqueue(2); q.enqueue(3); while (!q.isEmpty()) { q.dequeue(x); cout << x << " "; } return 0; } ``` 以上代码实现循环队列的基本操作,包括判断队列是否为空、判断队列是否已满、入队操作和出队操作。在入队操作中,需要判断队列是否已满,如果已满则入队失败;在出队操作中,需要判断队列是否为空,如果为空则出队失败。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tq02

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值