链表有哪些用途?

时间:2010-09-23 02:16:40

标签: data-structures computer-science linked-list

链接列表是否具有任何实际用途。许多计算机科学书籍将它们与数组进行比较,并说它们的主要优点是它们是可变的。但是,大多数语言都提供可变版本的数组。链接列表在现实世界中是否有任何实际用途,或者它们只是计算机科学理论的一部分?

10 个答案:

答案 0 :(得分:14)

它们绝对珍贵(在流行的双重链接版本中不太流行,但在适用时更简单,更快!,单链接版本)。例如,在“可变版本的数组”(例如C ++中的std::vector)中的指定“随机”位置插入(或移除)新项目为O(N)其中N是数组中的项目数,因为所有后面的项目(平均一半)必须转移,这是一个O(N)操作;在列表中,它是O(1),即恒定时间,如果您已经例如指向“上一个”项目的指针。像这样的大O差异绝对是巨大 - 真实可用和可扩展程序与玩具,“家庭作业” - 级别之间的区别! - )

答案 1 :(得分:12)

链接列表有很多用途。例如,实现最终用户看来是可变数组的数据结构。

如果您使用的是提供各种集合实现的编程语言,那么许多集合将使用链接列表实现。使用这些语言进行编程时,您不会经常自己实现链接列表,但理解它们可能是明智的,这样您就可以理解您使用的库所做的权衡。换句话说,“只是计算机科学理论的一部分”这一集包含了你只需要编写可以正常工作的程序就需要知道的元素。

答案 2 :(得分:8)

链接列表的主要应用是

  • 用于表示多项式 它表示两个多项式的加法/减法/乘法。 例如:p1 = 2x ^ 2 + 3x + 7且p2 = 3x ^ 3 + 5x + 2 P1 + P2 = 3×^ 3 + 2×^ 2 + 8×+ 9
  • 动态内存管理 在运行时分配和释放内存。 *在符号表中 在平衡paranthesis
  • 代表稀疏矩阵

价: - http://www.cs.ucf.edu/courses/cop3502h.02/linklist3.pdf

答案 3 :(得分:4)

是的,当然有很多原因是有用的。

任何时候,例如您希望从列表中有效插入和删除。要查找插入位置,您可以进行O(N)搜索,但如果已经有正确的位置则进行插入,则为O(1)。

您从链接列表中学到的概念也可以帮助您学习如何构建基于树的数据结构和许多其他数据结构。

答案 4 :(得分:3)

链接列表与向量相反的主要优点是随机插入时间就像解耦一对指针并将它们重新耦合到新对象一样简单(当然,这对于双重处理来说稍微多一点 - 链表)。另一方面,向量通常在插入时重新组织存储空间,导致它显着变慢。但是,由于必须在列表中一直进行,因此在执行诸如添加容器末尾之类的操作时,列表效率不高。

答案 5 :(得分:3)

永久链接列表是持久数据结构的最简单的例子,这就是为什么它是许多函数语言中的标准(有时甚至是唯一)数据结构的原因。 Lisp,Scheme,ML,Haskell,Scala,你的名字。

答案 6 :(得分:3)

链接列表在现实世界中有任何实际用途,

链接列表的使用/示例(双重)可以在建筑物中抬起
- 一个人必须经过所有楼层才能到达顶部(链表中的尾部) - 一个人不能直接去一些随机楼层(必须通过中间楼层/节点) - 一个人永远不能超越顶层(尾节点旁边被指定为空) - 一个人永远不能超越地面/最后一层(头节点的前一个在链表中被指定为空)。 Lift Image

答案 7 :(得分:2)

链接列表在动态内存分配中非常有用。这些列表用于操作系统。在链表中插入和删除非常有用。使用链表实现复杂的数据结构,如树和图。

答案 8 :(得分:1)

链接列表非常有用,因为元素可以像其他人注意到的那样在中间有效地拼接和删除。然而,链接列表的缺点是参考位置不佳。除非我明确需要这些功能,否则我不喜欢使用列表。

答案 9 :(得分:1)

由于计算机内存的工作方式,根据需要增长的数组总是一种幻觉。在引擎盖下,它只是一个连续的内存块,当添加了足够的新元素时必须重新分配。同样,如果从数组中删除元素,则必须分配新的内存块,复制数组并释放前一个块以回收未使用的内存。链接列表允许您扩展和收缩元素列表,而无需重新分配列表的其余部分。