数据结构-环形队列(数组实现)

本文探讨了单向数组实现环形队列的缺点,并提出了改进方案。通过改变front和rear的含义,建立了队满和队空的条件。详细阐述了队满条件的判断,入队、出队时指针的移动,以及如何计算有效数据个数。
摘要由CSDN通过智能技术生成

 

问题探讨:

单向数组实现环形队列的缺点:不能充分利用数组空间

针对单向数组的改进:


环形队列的思想:

1.front含义改变:front指向队列的第一个元素,初始化front=0

2.rear含义改变:指向队列最后一个元素的后一个位置,空出一个空间作为约定,初始化rear=0;(rear前一个元素为队列的最后一个元素,rear指向空位置的)

3.队满条件:(rear+1)%maxsize=front

(我们大可想象成一个收尾相连的环形数组(不太严谨,我的鄙见),rear+1就相当于指向了front,但要保证队满,转变了思想,巧妙的运用到取模,若有错误,希望多多指教)

在这里插入图片描述

4.队空条件:rear=front

5.队列有效的数据个数(rear+maxsize-front)%maxsize 例如上图:(7+8-0)%8=7

改进内容:

1.队满条件

//判断是否队满
public boolean isFull(){
    return (rear+1)%MAXSIZE==front;
}

2.入队指针移动

//添加内容,入队
public void enqueue(int number){
    if(isFull()){
        throw new RuntimeException("队列已满,不能加入!");
    }
    //rear本身指向最后元素的下一个位置,直接加入,指针后移
    arrQueue[rear]=number;
    rear=(rea
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

霓乤

谢谢支持,菜鸟会继续努力..

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

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

打赏作者

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

抵扣说明:

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

余额充值