动态数组中的删除操作

编辑:这是我上一篇文章的继续/扩展,可以在这里找到:Dynamic array add at the end?

  

[5,9,-1,6,4,13,X,X]length = 8的动态数组numElements = 6开始,在执行(a)3个删除最后一个操作和(b)4个删除最后一个操作时显示该数组。 X表示条目,可以忽略。

我得到的检查点(答案)是(a)[5,X]和(b)[5,X]

现在第一个对我很好。

[5,X]
[5,X]

这就是我应该得到(a)的答案。

但是(b)呢?这是我的尝试:

[5,X]

从这里开始,由于长度为8,等于4 *个数字元素(即4 * 2 = 8),所以我将数组切成两半,将长度减少为4。

[5,X]

但是为什么到此为止/为什么[5,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
wlong20008 回答:动态数组中的删除操作

好的,我只是问我的老师。他说,部分b的删除操作也从初始堆栈[5,9,-1,6,4,13,X,X]开始。相同的步骤适用于b部分-当我得到2个元素时,按照我附加的伪代码,将长度减少了一半。

本文链接:https://www.f2er.com/3156814.html

大家都在问