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

来源:3-6 循环队列

lemonlxn

2019-09-04

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

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

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

写回答

1回答

liuyubobobo

2019-09-04

不是这个样子。


扩容不仅仅是增加了容量,那一重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
3
lemonlxn
运行代码,也是如此,下次我先debug,非常感谢!
2019-09-04
共3条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程