使用循环数组的队列实现:调整循环数组大小的最佳方法是哪一种?
|
我正在使用圆形数组来实现队列,并且我有点陷入
resize()
方法的实现中(当数组已满时)。
在enqueue()
方法内部,我检查数组的大小是否等于其长度,并获取数组是否已满。现在,我没有引发异常,而是尝试调整数组的大小。
事情是,我有两种情况要考虑
前<=后
后<前
将旧数组的元素复制到更大的新数组中的最佳方法是什么?
我认为它使用for循环,例如:
newArray = new Array[oldArray.length*2];
if (front <= rear) {
for (int i = front; i < rear; i++) {
newArray[i] = oldArray[i];
}
} else {
for (int i = front; i < newArray.length; i++) {
newArray[i] = oldArray[i];
}
for (int j = rear; j < front; j++) {
// i\'m using the variable i, the order is maintained
newArray[i] = oldArray[j];
i++;
}
}
然后oldArray
=newArray
,返回newArray
并调整大小
我不确定用于此操作的for数量,恐怕会失去价值。
有人可以告诉我是否有更好的方法吗?
没有找到相关结果
已邀请:
4 个回复
甲车劲
前<=后 数据是非连续的,因此将两个块都复制到新数组的开头。
惭法搽
如您所见,我利用了“ circular \”的优势,并使用%运算符将旧数组的位置映射到了新数组。 生成的数组将具有两倍的容量,并且所有元素(显然要保持原始顺序)都位于新数组的开头。 我已经对其进行了测试,并且工作正常。 Lemme知道该代码是否有任何不便之处。 问候
诉嘎归亮
慷祈霖黑
和
(或者反之,我不知道您的命名法)。在第二种情况下,您可以一步来复制整个数组,在(更一般的)第一种情况下,您有两个块(0 ..前面和后面.. length-1)要复制。
要回复问题请先登录或注册