Data structures 链表有什么用途?

Data structures 链表有什么用途?,data-structures,computer-science,linked-list,Data Structures,Computer Science,Linked List,链表有什么实际用途吗。许多计算机科学书籍将它们与数组进行比较,并说它们的主要优势在于它们是可变的。但是,大多数语言都提供数组的可变版本。那么,链表在现实世界中有什么实际用途呢,还是它们只是计算机科学理论的一部分呢?是的,当然它有很多用处 任何时候,例如,您希望从列表中高效插入和删除。要找到插入位置,您需要进行O(N)搜索,但如果您已经找到了正确的位置,则需要执行插入操作,即O(1) 此外,使用链表学习的概念有助于您学习如何创建基于树的数据结构和许多其他数据结构。链表的主要应用包括 用于表示多项

链表有什么实际用途吗。许多计算机科学书籍将它们与数组进行比较,并说它们的主要优势在于它们是可变的。但是,大多数语言都提供数组的可变版本。那么,链表在现实世界中有什么实际用途呢,还是它们只是计算机科学理论的一部分呢?

是的,当然它有很多用处

任何时候,例如,您希望从列表中高效插入和删除。要找到插入位置,您需要进行O(N)搜索,但如果您已经找到了正确的位置,则需要执行插入操作,即O(1)


此外,使用链表学习的概念有助于您学习如何创建基于树的数据结构和许多其他数据结构。

链表的主要应用包括

  • 用于表示多项式 它的意思是加法/减法/多重运算。。由两个多项式组成。 例如:p1=2x^2+3x+7和p2=3x^3+5x+2 p1+p2=3x^3+2x^2+8x+9
  • 在动态内存管理中 在运行时分配和释放内存。 *在符号表中 平衡偏执
  • 表示稀疏矩阵
参考:-

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

相对于向量,链表的一个主要优点是,随机插入时间与解耦一对指针并将它们重新连接到新对象一样简单(当然,对于双链表来说,这需要稍微多做些工作)。另一方面,向量通常会在插入时重新组织内存空间,导致其速度显著降低。但是,由于需要在列表中不断前进,所以在列表中添加列表是没有效率的。

链表是有用的,因为元素可以像其他人一样在中间有效地拼接和删除。然而,链表的一个缺点是引用的局部性差。出于这个原因,我宁愿不使用列表,除非我明确需要这些功能。

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

链表有多种用途。例如,实现最终用户认为是可变数组的数据结构


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

不可变链表是持久数据结构最简单的例子,这就是为什么它是标准(有时甚至是唯一的)许多函数式语言中的数据结构。Lisp、Scheme、ML、Haskell、Scala,随便你说。链表在动态内存分配中非常有用。这些列表用于操作系统中。在链表中插入和删除是非常有用的。复杂的数据结构(如树和图)是使用链表实现的。

所以链表在现实世界中是否有任何实际用途,

链接列表的用法/示例(双重)可在建筑物中提升
-一个人必须穿过所有楼层才能到达顶部(链表中的尾部)。
-一个人永远不能直接去某个随机楼层(必须通过中间楼层/节点)。
-一个人永远不能超过顶层(尾部节点旁边的节点被分配为空)。

-一个人永远不能超出底层/最后一层(在链接列表中,头节点之前的节点被指定为空)。

即使对于单链接列表,也可以保留一个结束指针,以便于附加元素。这些都是一些应用程序,但表示多项式真的是链接列表的“主要”用途之一吗?我想说的是,它们还有其他更常见的用途,例如常规列表和队列。您在这里给出的现实世界示例非常容易理解,+1在链表中插入是O(N)对吗?(因为我们需要在节点上循环以到达目标节点以完成插入)插入实际上是O(N),除非插入到索引0中或附加元素。编辑:除非您不计算需要首先查找元素的事实,即O(N)。