我正在阅读here中的一句话,我对一句话感到困惑:
"这使得底层例程能够比其他语言中的列表快得多,在这些列表中您必须关注双链接,破坏性更新等等。"
我尝试使用谷歌搜索双链接,但无法找到合适的定义。当作者说"双链接"?
时,作者的意思是什么答案 0 :(得分:1)
在回答之前,我们需要了解一些定义和概念。
在引用的article的上下文中是列表的两个概念。
列表的构建,销毁和使用方式也不同。
虽然必须构造每个列表,但是通过仅将新项添加到列表的头部来构造不可变列表,而可以通过在列表中的任何位置添加项来构造链表,尽管通常将新项添加到列表的末尾。链表。
不可变列表仅在一个方向上遍历,从头到尾,而链表可以在前后方向上遍历,甚至可以在遍历时改变方向。
不可变列表不会通过源代码中的语句销毁,而是通过垃圾收集自动销毁,而链接列表必须使用析构函数语句销毁。
另外,不可变列表都是相同的类型,而链表可以容纳不同类型的项目。
由于不可变列表的限制,对任何项的操作都是O(1)。例如,将项添加到列表中的是O(1),因为它总是添加到头部。要使用列表中的项目是O(1),因为它是列表的当前头部。如何实现这一点是当列表与函数式语言一起使用时,使用头部项目并传递列表的尾部,以便传递的列表尾部具有新的头部。对于列表1,2,3
,我们使用列表的标题1
,然后传递列表2,3
,其中2
是新头。在概念上是的,它们是两个不同的列表,但是如何实现它的细节是另一个问题。
当作者说“双链接”时,作者的意思是什么?
“double-links”指的是doubly linked list,它们是语言中的列表,允许构建列表中的项目以指向前一项和后一项。
评论中的OP也问:
单个链接到底是什么让它比它更快 双链接?
正如我在前面部分中提到的那样,列表上的所有操作都是O(1)。