多出一个空值肯定是为了避免什么问题
一开始我的想法是front指向队列的第一个元素,rear指向队列的最后一个元素
环形队列的最大长度为maxSize
所以此时,
判空的条件就是:front=rear
判满的条件就是(rear+1)% maxSize = front
好像这没毛病啊
毛病大了
在用数组实现队列时,书上是这样约定的
此时rear指向的就是当前元素的下一个位置,这也就是为什么很多老师讲课的时候说的规定rear指向最后一个元素的后面一个位置(不理解的看一下图)
再回到环形队列,当我们插入最后一个元素的时候,此时rear就和front重合了,即rear=front
我们判空的条件就是rear=front
所以判空和判满的条件就一样了,那到底是判空还是判满呢,我也不知道
所以我们要改变判满的条件
书上也给出了解决方法
第一种方法:
我们就少用一个元素空间,即如下图就判定队列已满
此时队列未满的情况就是(rear+1)%maxSize = front
这样就解决了判空和判满条件一样的那个问题
回头看一下,这不是和我们一开始说的那个判满的条件是一样的吗
你在想想,真的一样吗,虽然式子一样,但是表达的内容已经不一样了
第二种方法:
可以设定一个变量来保存队列的长度,这样就可以不用浪费一个内存空间,虽然判满和判空的条件一样,但是我们可以根据队列长度来判断队列是空还是满,队列长度等于maxSize就是满,队列长度=0就是空