循环队列牺牲一个单元来区分队空和队满,入队时少用一个队列单元
队中元素个数:(Q.rear+MaxSize-Q.front)%MaxSize
这是网上的说法,我不能理解的是为什么要加MaxSize,
比如rear=6,front=1,这个中间有5个元素,假设容量就为5,如果用上面的公式:Q.rear+MaxSize-Q.front=(6+5-1)%5==0,容量变成了0,这个mxsize到底如何理解的,很苦恼。向各位请教
emmmmmm
rear=6,front=1,你这个编号范围要是1-6,那么MaxSize=6
rear+MaxSize-front=(6+6-1)%6=5
关于 循环队列牺牲一个单元来区分队空和队满,入队时少用一个队列单元 ,它用来解决判断循环队列 队空 还是 队满 的问题
主要是影响这个判断条件,如果是最大容量是6,编号是1-6,那么6会被空出来(以rear和front指向1为例)
判断队空是rear == front,1 == 1
判断队满是(rear+1)% MaxSize == front,(6+1)% 6 == 1
解决上述判空判满问题也不一定非要用上述方法
不能因为判空的问题就改变MaxSize的数值
MaxSize理解成 队列可能达到的最大长度 也可以
如果上述题主明白了我的意思,那么正常来说这里加MaxSize的原因就是因为是循环队列,不能算出来个负数