什么是双链接?

时间:2014-01-11 22:23:10

标签: compiler-construction programming-languages definition

我正在阅读here中的一句话,我对一句话感到困惑:

"这使得底层例程能够比其他语言中的列表快得多,在这些列表中您必须关注双链接,破坏性更新等等。"

我尝试使用谷歌搜索双链接,但无法找到合适的定义。当作者说"双链接"?

时,作者的意思是什么

1 个答案:

答案 0 :(得分:1)

在回答之前,我们需要了解一些定义和概念。

在引用的article的上下文中是列表的两个概念。

  1. 在函数语言中使用的不可变列表,例如ML。
  2. 在C,C ++,Java等命令式语言中使用的链表,(可变列表)。
  3. 列表的构建,销毁和使用方式也不同。

    虽然必须构造每个列表,但是通过仅将新项添加到列表的头部来构造不可变列表,而可以通过在列表中的任何位置添加项来构造链表,尽管通常将新项添加到列表的末尾。链表。

    不可变列表仅在一个方向上遍历,从头到尾,而链表可以在前后方向上遍历,甚至可以在遍历时改变方向。

    不可变列表不会通过源代码中的语句销毁,而是通过垃圾收集自动销毁,而链接列表必须使用析构函数语句销毁。

    另外,不可变列表都是相同的类型,而链表可以容纳不同类型的项目。

    由于不可变列表的限制,对任何项的操作都是O(1)。例如,将项添加到列表中的是O(1),因为它总是添加到头部。要使用列表中的项目是O(1),因为它是列表的当前头部。如何实现这一点是当列表与函数式语言一起使用时,使用头部项目并传递列表的尾部,以便传递的列表尾部具有新的头部。对于列表1,2,3,我们使用列表的标题1,然后传递列表2,3,其中2是新头。在概念上是的,它们是两个不同的列表,但是如何实现它的细节是另一个问题。

      

    当作者说“双链接”时,作者的意思是什么?

    “double-links”指的是doubly linked list,它们是语言中的列表,允许构建列表中的项目以指向前一项和后一项。

    评论中的OP也问:

      

    单个链接到底是什么让它比它更快   双链接?

    正如我在前面部分中提到的那样,列表上的所有操作都是O(1)。