动态数组添加到底?

从初始长度为4且numElements = 0的动态数组开始,当我们在末尾添加以下数字时显示该数组:5、19、4、6,-1。

我收到的检查点(答案)是[5、19、4、6,-1,X,X,X],其中X表示可以忽略的条目。

我有2个愚蠢的问题:

  1. 我想在结尾处插入将使它成为[X,X,X,5,19,4,6,-1],而不是现在答案中的样子?

  2. 尽管最初我每次在数组中添加内容时,数组都会自动将其长度加倍,这就是为什么我们在末尾添加3个X,使总结束长度为8而不是初始大小为4。这是正确的吗?

nancy8888521 回答:动态数组添加到底?

它是这样的。

“在末尾添加”表示附加到数组的末尾。让我们先做它,而不必担心内部问题。

首先列表为空

[]

然后您插入5

[5]

然后19

[5,19]

然后依次是4、6,-1

[5,19,4]
[5,4,6]
[5,6,-1]

现在,当我们拥有容量为4的倍数的数组时,它的外观如何。正如您所说的,当它们填满时,它们的大小会增加一倍。这就是进度:

X  X  X  X

5  X  X  X

5 19  X  X

5 19  4  X

5 19  4  6

5 19  4  6 -1  X  X  X

插入前4个元素时,将填充4个块。插入第5个元素时,我们没有空间,因此我们必须将容量增加一倍至8,然后将第5个元素放在第一个可用插槽中。

是的,关于容量翻倍您是正确的。但是,数组元素始终从头开始填充,最后使用未使用的插槽。如果将值放在末尾,则每次插入时都必须将其移到左侧,这样效率很低。

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

大家都在问