循環配列を使用してキューを実装していますが、メソッドの実装でスタックしていresize()
ます (配列がいっぱいの場合)。
メソッド内enqueue()
で、配列のサイズがその長さと等しいかどうかを確認し、それがいっぱいかどうかを取得します。ここで、例外をスローする代わりに、配列のサイズを変更しようとしています。
問題は、考慮すべき2つのケースがあるということです
- フロント <= リア
- リヤ<フロント
古い配列の要素を新しい大きな配列にコピーする最良の方法はどれですか?
次のような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 の量がわからないので、値を失うのではないかと心配しています。
これを行うためのより良い方法があるかどうか誰かに教えてもらえますか?