【问题标题】:What is the difference between an ordered list and an array from a theoretical perspective? [closed]从理论角度来看,有序列表和数组有什么区别? [关闭]
【发布时间】:2012-02-21 12:30:51
【问题描述】:

有什么区别吗?还是说它们是同一事物的两个术语?

【问题讨论】:

  • 它与 HTML 有什么关系?

标签: arrays data-structures html-lists


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    虽然数组和列表有一些相似之处,但它们的用途不同。

    数组是一段连续的内存,而列表只是一堆节点,每个节点都有指向“下一个”节点的指针(在双向列表的情况下也指向“前一个”节点) .

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

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

    【讨论】:

      【解决方案3】:

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

      通常,将项目添加到列表中的特定点比在数组中的等效点添加新项目更快。 (在数组中,您必须将其他条目打乱;在列表中,您只需在最多 3 个元素中调整适当的指针。)从列表和数组中删除元素也是如此。

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

      【讨论】:

      • 那么数组是基于硬件(或实现)的概念,而有序列表是抽象数据类型?
      • 链表也是基于实现的(尽管有人可能会争辩说它们比数组更“抽象”)。顺便说一句,抽象数据类型粗略地说是您的数据结构必须支持的接口。并且让数组和链表实现相同的接口并不难(例如,看看 Java 中的 ArrayList 与 LinkedList)。虽然,关键操作的效率:插入、删除和 [](在给定索引 i 处访问)将大不相同。
      猜你喜欢
      • 2011-01-17
      • 2013-08-27
      • 1970-01-01
      • 2015-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      • 2012-12-09
      相关资源
      最近更新 更多