币圈技术流
2020-08-26 20:27
采纳率: 25.7%
浏览 201

循环队列的容量大小计算问题疑惑

循环队列牺牲一个单元来区分队空和队满,入队时少用一个队列单元
队中元素个数:(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到底如何理解的,很苦恼。向各位请教

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • 青丝缠光阴 2020-08-26 22:01
    已采纳

    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的原因就是因为是循环队列,不能算出来个负数

    点赞 打赏 评论

相关推荐 更多相似问题