采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师好,循环队列满的时候,需要扩容。
请问扩容后,循环队列的情况,是否如下:
不过,我不是很清楚现在tail,以及front 的指向。 不过看您的代码,是让front指向0。这个有点想不清楚。
不是这个样子。
扩容不仅仅是增加了容量,那一重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开始依次排列。非扩容或缩容的时候,循环队列还是按照之前的逻辑,出入队列,是吧?
是的:)
运行代码,也是如此,下次我先debug,非常感谢!
登录后可查看更多问答,登录/注册
动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…
10.4k 16
1.4k 17
1.3k 14