请稍等 ...
×

采纳答案成功!

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

关于循环队列,扩容的疑问

老师好,循环队列满的时候,需要扩容。
图片描述

请问扩容后,循环队列的情况,是否如下:
图片描述

不过,我不是很清楚现在tail,以及front 的指向。
不过看您的代码,是让front指向0。这个有点想不清楚。
图片描述

正在回答

1回答

liuyubobobo 2019-09-04 09:47:22

不是这个样子。


扩容不仅仅是增加了容量,那一重for循环,同时移动了所有的元素,让所有的元素从0开始排列了,所以,front从零开始。


实际的打印一下data数组中的元素,看看data数组中的元素在怎样变化?

private void resize(int newCapacity){    
    
    // 这是 resize 前,看看这里的 data 是什么样子?
    
    E[] newData = (E[])new Object[newCapacity + 1];    
    for(int i = 0 ; i < size ; i ++)    
        newData[i] = data[(i + front) % data.length];    
    data = newData;    
    // 这是 resize 后,看看这里的 data 是什么样子?
    
    front = 0;    
    tail = size;    
}


如果有必要,单步跟踪,仔细理解一下,那个 for 循环到底在干什么?


加油!:)


0 回复 有任何疑惑可以回复我~
  • 提问者 lemonlxn #1
    嗯,也就是说,扩容或缩容,是让所有元素从0开始依次排列。非扩容或缩容的时候,循环队列还是按照之前的逻辑,出入队列,是吧?
    回复 有任何疑惑可以回复我~ 2019-09-04 10:28:43
  • liuyubobobo 回复 提问者 lemonlxn #2
    是的:)
    回复 有任何疑惑可以回复我~ 2019-09-04 10:30:57
  • 提问者 lemonlxn #3
    运行代码,也是如此,下次我先debug,非常感谢!
    回复 有任何疑惑可以回复我~ 2019-09-04 10:34:44
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信