请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于扩容的问题

有个问题没有想明白,扩容的前提是 (tail+1)%data.length == front
有这么一种情况,创建一个循环队列,传入容量是5,实际长度是6,在队列都是满的情况下,如果这个时候front的在位置索引1的情况下,再添加元素的时候, (tail+1)%data.length == front这个公式是成立的,就进行扩容,那如果队首的位置在0,队尾的位置在4,这个时候再添加元素,也是应该进行扩容的,因为我们始终是要浪费一个空间,但是这个时候公式是不成立的

正在回答 回答被采纳积分+3

1回答

liuyubobobo 2018-11-24 14:45:26

永远不会容量是5,队首是0,队尾是4的情况。


因为在队首是0,对尾是3的时候,添加下一个元素入队,就已经扩容了。之后,容量为10,队首是0,队尾是4:)

0 回复 有任何疑惑可以回复我~
  • 提问者 无心铁憨憨 #1
    tail位置的计算公式应该就是(tail+1)%data.length,队首是0,队尾是3,这个时候tail指向的应该是4,再添加元素的时候是先判断(4+1)%6 == front,length是6对吧,这个应该没有错,那么5%6不会是0啊,是我脑子转不过来,还是我计算错误了
    回复 有任何疑惑可以回复我~ 2018-11-25 10:06:16
  • liuyubobobo 回复 提问者 无心铁憨憨 #2
    容量不是5吗?6是哪里来的?你添加6个元素,只是执行6次add而已,6不会进入这个公式。实际创建一个初始容量为5的队列,让后往里添加6个元素,试试看?跟踪一下,在每一步,front,tail,size各个变量是如何变化的?加油!
    回复 有任何疑惑可以回复我~ 2018-11-25 10:27:03
  • 提问者 无心铁憨憨 回复 liuyubobobo #3
    老师,我传入的容量是5,但队列实际长度不应该是6么
    回复 有任何疑惑可以回复我~ 2018-11-26 22:49:28
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信