Я реализую очередь , используя круговой массив , и я застрял в реализации метода resize()
(когда массив заполнен).
Внутри метода enqueue()
я проверяю, равен ли размер массива его длине, и получаю, если он заполнен. Теперь вместо исключения я пытаюсь изменить размер массива.
Дело в том, что у меня есть два случая для рассмотрения
- спереди <= сзади </li>
- сзади <спереди </li>
Каков лучший способ скопировать элементы старого массива в новый, больший?
Я думал, что это с помощью цикла 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, использованном для этого, и боюсь, что потерял значения.
Может кто-нибудь сказать мне, есть ли лучший способ сделать это?