
上QQ阅读APP看书,第一时间看更新
1.7 删除
删除指的是删去特定索引的值的过程。
下面以删除购物清单数组索引2处的值为例。在这个数组中,这个值是"cucumbers"
。
第1步:从数组中删除"cucumbers"
,如下图所示。

严格意义上来说,删除"cucumbers"
只需1步。但有一个问题:数组中间有了一个空格子。中间有空格子的数组是无效的。要解决这个问题,需要把"dates"
和"elderberries"
左移。因此删除操作还需要额外步骤。
第2步:左移"dates"
,如下图所示。

第3步:左移"elderberries"
,如下图所示。

结果,这个删除操作用了3步。1步是删除元素,另外2步是移动元素来填补空格子。
和插入一样,删除元素的最坏情况是删除数组中的第一个元素。因为索引0会变成空格子,所以必须把剩余的所有元素都左移。
对有5个元素的数组来说,删除第一个元素需要1步,移动4个剩余的元素需要4步。对有500个元素的数组来说,删除第一个元素需要1步,移动剩余的元素需要499步。因此,对于有N个元素的数组,删除操作最多需要N步。
恭喜!你已经分析完第一个数据结构的时间复杂度。你已经学会了如何分析数据结构的效率,之后你会发现,不同数据结构的效率也不同。这一点很关键,因为为代码选择正确的数据结构直接决定了软件性能。
接下来要介绍集合,乍一看它和数组很相似。不过,你会发现同样的操作在数组和集合中有着不同的效率。