学习笔记-循环队列(解决队列无法复用)

这篇博客详细介绍了如何在Java中实现循环队列,包括解决无法判断队列状态的问题。博主通过牺牲一个存储空间作为标记,确保能正确判断队列是否为空或已满。文章包含分析说明、约定的含义解释、代码实现和测试环节。
摘要由CSDN通过智能技术生成

分析说明

 1. 尾索引的下一个为头索引时表示队列满,即将队列容量空出一个作为约定,这个在做判断队列满的时候需要注意(rear+1)%maxSize == front ()
 2. Rear == front ()
 3. 分析思路
 	1)front就指向队列的第一个元素,也就是说arr[front]就是队列的第一个元素,front的初始值 = 0
	2)rear指向队列的最后一个元素的后一个位置,希望空出一个空间作为约定,rear的初始值 = 0
	3)当队列满时,条件是(rear+1)%maxSize = front()
	4)当队列为空的条件,rear == front()
	5)队列中的有效数据个数(rear + maxSize -front) % maxSize
	6)这样我们就可以在原来的基础上修改得到,一个环形队列

约定的含义

在这里插入图片描述
我们可以发现,当循环队列属于上图的情况时,是无法判断当前状态是队空还是队满。为了达到判断队列状态的目的,可以通过牺牲一个存储空间来实现。

代码实现

//使用数组模拟队列-编写一个CircleArray类
class CircleArray {
   
    //表示数组的最大容量
    private int maxSize;
    //指向队列的第一个元素
    private int front;
    //队列指向队列的后一个元素的后一个位置,空出一个位置
    private int rear;
    //数组用于存放数据,模拟队列
    private int[] arr;

    //创建队列的构造器
    public CircleArray(int arrMaxSize) {
   
        maxSize = arrMaxSize;//最大容量
        arr = new int[maxSize];//格式化数组
    }

    //判断队列是否满
    public boolean isFull() {
   
        return (rear + 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值