从理论角度看,有序列表和数组之间有什么区别?

时间:2012-01-29 07:12:28

标签: arrays data-structures html-lists

是否有任何区别,或者它们是同一件事的两个术语?

3 个答案:

答案 0 :(得分:4)

尽管数组和列表之间存在一些相似之处,但它们可用于不同目的。

数组是连续的内存段,列表只是一堆节点,每个节点都有指向“下一个”节点的指针(对于双向列表,也指向“上一个”节点)

有效的数组 - 在O(1)中 - 支持随机访问(即通过任意给定的索引i),但删除/插入一个元素到一个数组很慢 - O(n),因为你必须在删除后移动所有元素/插入元素。 另一方面,列表不支持有效的随机访问(同时支持有效的连续遍历),但插入和删除很快 - O(1)。

看看这张图:enter image description here: 并在this link获得更好的解释。

答案 1 :(得分:1)

数组和列表是不同的数据结构。数组不一定是有序的。

性能方面,维护有序列表非常昂贵:O(N)插入,删除,但您可以比O(N)更快地进行搜索(使用二进制搜索之类的东西)。对于常规数组,搜索是O(N)。使用数组,您可以在O(1)中对成员进行随机访问,而在列表中使用O(N)。

答案 2 :(得分:0)

数组中的项目不一定按任何特定顺序排列。

通常,可以比在等效点处在数组中添加新项目更快速地向列表中的特定点添加项目。 (在数组中,你必须改变其他条目;在列表中,你只需在最多3个元素中调整适当的指针。)同样从列表和数组中删除元素。

访问列表中的N th 项需要O(N)时间,但对于数组来说是O(1)时间。