Операции удаления в динамических массивах - PullRequest
0 голосов
/ 05 ноября 2019

Редактировать: Это продолжение / расширение моего предыдущего поста, которое можно найти здесь: Добавление динамического массива в конце?

Начиная с динамического массива [5, 9, -1, 6, 4, 13, X, X] из length = 8 и numElements = 6, показать массив, когда мы выполняем (а) 3 удаления последних операций и (б) 4 удаления последних операций. X обозначает записи, которые можно игнорировать.

Контрольная точка (ответ), которую я получил, была (a) [5, 9, -1, X, X, X, X, X] и (b) [5, 9, X, X].

Теперь первыйсо мной все в порядке.

[5, 9, -1, 6, 4, 13, X, X]
[5, 9, -1, 6, 4, X, X, X]
[5, 9, -1, 6, X, X, X, X]
[5, 9, -1, X, X, X, X, X]

Так что именно поэтому я должен получить ответ (а).

А как насчет (б)? Вот моя попытка:

[5, 9, -1, X, X, X, X, X]
[5, 9, X, X, X, X, X, X]

Отсюда, поскольку длина равна 8 и равна 4 * числовым элементам (то есть 4 * 2 = 8), поэтому я урежу массив наполовину,сокращение длины составляет 4.

[5, 9, X, X]

Но почему это останавливается здесь / почему [5, 9, X, X] был окончательным ответом? Это было только 2 операции удаления, и у нас их всего 4, что будет дальше?

Вот псевдокод, который я пытаюсь сделать:

function deleteLast()
if (numElements == 0) then
print “Cannot delete from an empty array”
else if (numElements == 1) then
set numElements to 0
set length to 1
resize array A to 1
else
decrement numElements
if (4 ∗ numElements == length) then
update length to 2 ∗ numElements
create an array B of size length
use a loop to copy first numElements numbers from A to B
set A to B

1 Ответ

0 голосов
/ 06 ноября 2019

Хорошо, я только что спросил моего инструктора. Он сказал, что операция удаления для части b также начинается с начального стека [5, 9, -1, 6, 4, 13, X, X]. Тот же шаг применяется для части b - и когда мы получаем 2 элемента, мы сокращаем длину до половины, как в соответствии с псевдокодом, который я прикрепил.

...