从初始长度为4且numElements = 0的动态数组开始,当我们在末尾添加以下数字时显示该数组:5、19、4、6,-1。
我收到的检查点(答案)是[5、19、4、6,-1,X,X,X],其中X表示可以忽略的条目。
我有2个愚蠢的问题:
-
我想在结尾处插入将使它成为[X,X,X,5,19,4,6,-1],而不是现在答案中的样子?
-
尽管最初我每次在数组中添加内容时,数组都会自动将其长度加倍,这就是为什么我们在末尾添加3个X,使总结束长度为8而不是初始大小为4。这是正确的吗?
从初始长度为4且numElements = 0的动态数组开始,当我们在末尾添加以下数字时显示该数组:5、19、4、6,-1。
我收到的检查点(答案)是[5、19、4、6,-1,X,X,X],其中X表示可以忽略的条目。
我有2个愚蠢的问题:
我想在结尾处插入将使它成为[X,X,X,5,19,4,6,-1],而不是现在答案中的样子?
尽管最初我每次在数组中添加内容时,数组都会自动将其长度加倍,这就是为什么我们在末尾添加3个X,使总结束长度为8而不是初始大小为4。这是正确的吗?
它是这样的。
“在末尾添加”表示附加到数组的末尾。让我们先做它,而不必担心内部问题。
首先列表为空
[]
然后您插入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个元素放在第一个可用插槽中。
是的,关于容量翻倍您是正确的。但是,数组元素始终从头开始填充,最后使用未使用的插槽。如果将值放在末尾,则每次插入时都必须将其移到左侧,这样效率很低。