Ваша идея состоит в реализации массива «resizable» на массив java (который имеет фиксированный размер). Первыми nElem
элементами в этом фиксированном массиве являются логический массив. Теперь вы хотите, чтобы иметь возможность устанавливать и удалять элементы и из этого логического массива:
[00] [01] [02] [03] [04] [05] [06] [07] [08] [09] ... [99] // physical array
[00] [01] [02] [03] [04] [05] [06] [07] [08] // logical array, nElem = 9
Insert '99' at (logical) position 04
[00] [01] [02] [03] [99] [04] [05] [06] [07] [08] // nElem = 10
Delete value at (logical) position 03
[00] [01] [02] [99] [04] [05] [06] [07] [08] // nElem = 9
Размер массива Java по-прежнему 100 (это фиксированная), размер логического массива (nEleme) должен настраиваться после каждой вставки и снимать операцию.
Если вы вставляете элемент, вам нужно «сдвинуть» некоторые элементы «вправо» (и увеличить nElem). Для этого вам понадобится цикл for и счетчик (j
). То же самое происходит, если вы хотите удалить элемент, вам нужно «сдвинуть» элементы «влево» и снова вам понадобится счетчик.
Почему мы используем j и nElems для поиска массива.
Для поиска элемента в (несортированных) коллекции (массив, набор, ..), вы должны смотреть на каждый элемент, может быть, начиная с индекса = 0 до индекса = (nElem-1). Если значение в текущей позиции соответствует вашим критериям поиска (пример: is-equal-to), вы можете разбить поиск. j
хранит этот фактический индекс, nElem
то размер (логического) массива так (nElem-1)
индекс последнего элемента в этом (логический) массив)
Почему мы снова назначить J к к для удаления? Разве мы не можем удалить его из j?
Просто для чтения. Это тоже будет работать, но гораздо труднее понять.
for(j = 0; j < nElems; j++) {
if(arr[j] == searchKey) {
break;
}
}
for(;j < nElems-1; j++) { // note the missing initialzing value for the loop
arr[j] = arr[j+1];
}
Да боги. Некоторое простое форматирование сделало бы эту задачу легче проглотить. – skaffman
это сделал sir – theband
нет, * I * сделал –