【问题标题】:Different Types of Linked Lists!不同类型的链表!
【发布时间】:2011-01-24 00:54:43
【问题描述】:

常用的链表有哪些不同类型?

我知道并使用过以下内容:

  1. 单链表
  2. 双向链表
  3. 循环列表

您使用过或知道的其他类型的列表有哪些?

【问题讨论】:

  • 循环列表既可以单链接也可以双链接,因此“选项”实际上与链接方向性正交,而不是单独的选项。

标签: c data-structures linked-list


【解决方案1】:

还有一个multiply-linked list。

在多重链表中,每个节点包含两个或多个链接字段,每个字段用于以不同的顺序(例如,按姓名、按部门、按出生日期等)连接同一组数据记录.)。 (虽然双向链表可以看作是多重链表的特例,但由于两个顺序相反的事实导致算法更简单、更有效,因此通常将它们视为单独的情况。)

【讨论】:

  • 只是好奇有没有Unlinked List?哈哈 ;) +1
  • @The Machine Charmer:它们被称为数组 :)
  • @Charmer,是的,Java 中有一个ArrayList。
  • 难以置信!!你们太认真了!
  • @Charmer:在极客中,技术笑话可不是笑话 :)
【解决方案2】:

Skip lists! 不是真正的链表类型,而是相关的,而且非常整洁。

好的,它要么是一种链表,要么是一组链表,这取决于您对事物进行分类的方式,但它具有 O(log N) 插入/选择功能,这对于链表来说非常棒。

【讨论】:

  • 跳过列表实际上是一种链表,或者至少是多个链表的混合和混搭,这取决于您如何看待它。
  • 嗯嗯,我一直认为跳过列表是一些奇怪的半树/半列表突变结构。数据结构本体不是我的强项。
【解决方案3】:

我可能会想出能够从列表中的任何元素链接到第一个和最后一个元素的场景。如果没有人纠正我,我断言这被称为 High-Performance-Mark-List。

【讨论】:

  • 我会说从每个节点维护 1 或 2 个额外链接是一个非常糟糕的主意。特别是因为很容易在列表节点之外存储一个指向第一个和最后一个元素的指针,并且只需要在一个地方更新它们。即使在直接的 C 语言中(相对于面向对象的语言),我也会选择存储两个额外的变量,而不是用冗余数据来阻碍链表节点。
  • 您始终可以根据定义指向第一个节点(头)。并且保持指向最后一个节点(尾)的指针也是常见的编程实践。这种数据结构称为“头尾链表”。双端队列可以在这样的列表的基础上实现,所以有时这些术语被称为同义词。 en.wikipedia.org/wiki/Double-ended_queue
  • 遗憾的是,High-Performance-Mark-List 结果并不是一个高性能列表。唉。
【解决方案4】:
  1. Unrolled Linked List

在计算机编程中,展开链表是链表的一种变体,它在每个节点中存储多个元素。它可以显着提高缓存性能,同时减少与存储列表元数据(如引用)相关的内存开销。它与B树有关。 - 维基百科

  1. XOR Linked List

异或链表是一种数据结构 用于计算机编程。他们 利用按位 异或(XOR) 操作,这里用⊕表示,到 减少存储需求 双向链表。 - 维基百科

【讨论】:

    【解决方案5】:

    stacks 和queues 通常都是使用链表实现的,只是限制了支持的操作类型。 unrolled linked list 是一个链表,其中每个节点都包含一组数据值。这会提高缓存性能,因为更多的列表元素在内存中是连续的,并且减少了内存开销,因为需要为列表的每个元素存储更少的元数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多