【发布时间】:2012-01-30 08:45:40
【问题描述】:
我正在阅读有关 DynaArrayQueue 的实现(当没有足够的元素时,队列的大小会翻倍)
我对其中的两种方法有一些疑问。
令容量为队列的容量。
getQueueSize() 方法
public int getQueueSize()
{
if(front == -1) return 0;
//Here why can't the size by simply [(rear -front +1) %capacity ]
int size = (capacity - front + rear +1) % capacity;
if(size == 0) return capacity;
else return size;
}
在计算尺寸时我们为什么使用
size = (容量 - 前 + 后 +1 ) % 容量,而不是简单的 (后 - 前 +1) % 容量。 ?
问题 2:
resizeQueue()
这是调整队列大小的方法
private void resizeQueue()
{
int initCapacity = capacity;
capacity *=2;
int[] oldArray = array;
array = new init[this.capacity];
//this is fine
for(int i=0; i<oldArray.length;i++)
{
array[i] =oldArray[i];
}
//why do we need this ?
if(rear < front)
{
for(int i =0 ; i<front ; i++)
{
array[i+initCapacity] = this.array[i];
array[i]= null;
}
rear = rear + initCapacity;
}
}
方法中的第一个 for 循环很简单,但是为什么我们需要第二个 if 循环呢?。它在照顾什么条件?
【问题讨论】:
标签: java algorithm data-structures queue implementation