队列顺序存储结构中的循环队列判空与判满的过程

循环队列介绍

这里介绍的时队列的顺序存储结构(队首指针指向队头元素,队尾指针指向队尾元素的下一个位置):

  • 初始时:Q.front = Q.rear = 0;
  • 队首指针进1:Q.front = (Q.front+1)%maxSize;
  • 队尾指针进1:Q.rear = (Q.rear +1)%maxSize;
  • 队列长度: (Q.rear +maxSize-Q.front)%maxSize;
  • 出队入队时:指针都按顺时针方向进 1
    显然,队空的条件是:Q.front = Q.rear。但是,如果入队的速度快于出队的速度,队尾指针很快就赶上队首指针,此时,也有:Q.front = Q.rear。为了区分队空还是队满,有多种方式可以处理,这里介绍一种较为普遍的做法,即牺牲一个单元来区分队空和队满,入队时少用一个队列单元。约定:队尾指针在队首指针的上一个位置时,作为队满标志(这里也可以说:队首指针在队尾指针的下一位置时,作为队满的标志)

约定的原因

队空和队满时,都有Q.front = Q.rear,但两者发生的过程时不同的:

  1. 队空,是因为通过多次出队的操作,那么队首指针必然是通过顺时针 旋转,最后达到队尾指针,也就是说队首指针会先达到队尾指针减一的位置,然后再到达队尾指针的位置;
  2. 队满,是因为通过多次入队的操作,那么队尾指针也是通过顺时针旋 转,最后达到队首指针,也就是说,队尾指针会先到达队首指针减一的位置,然后再到达队首指针的位置。

在这里插入图片描述
注:以上内容参考了王道考研的数据结构。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值