【问题标题】:When is a linked list the best data structure to use什么时候链表是最好的数据结构
【发布时间】:2016-10-01 13:01:14
【问题描述】:

真的很喜欢这个标题。我的问题是你能举一个例子,链表是最好的数据结构。我一直在努力思考任何问题,而且在我的代码中,我几乎总是只使用哈希图或列表等。

http://bigocheatsheet.com/这里可以看到大O各种操作的备忘单。就复杂性而言,链表并不比堆栈或队列好。所以我想知道什么时候有人可能会在这些上使用链表?一个完美的答案会说“想象一下我正在尝试做 XYZ,如果我用数组做它看起来像这样 {输入一些代码},但是,如果我用链表做它,它看起来像这样 {enter更多代码}。链表的复杂性或空间要好得多。”等等。

我不想要有人告诉我什么是链表的答案。我知道链表是​​什么以及它们是如何实现的。

谢谢

【问题讨论】:

  • 当元素数量很少时,链表——因为如果它简单的话——可以比更复杂的数据结构更快。
  • 当您想要降低复杂性或根本不想要复杂性时。链表比其他复杂结构更容易掌握。

标签: data-structures complexity-theory


【解决方案1】:

考虑一下,如果你有一个人的阵容,并且你想在中间的某个地方添加很多人。如果您使用传统的 ArrayList,则需要移动它之后的所有元素,因此 O(N) 因为每个人的索引!在 LinkedList 中,每个人都是 O(1),O(N) 才能到达中间。链表在中间添加元素非常快,因为您不需要重新索引任何内容,只需调整本地指针即可。

【讨论】:

    【解决方案2】:

    有人对 C++ 标准模板库进行了调查,发现链表是所有常见基本结构中使用最少的。所以你是对的,它们用得不多。当您不需要随机访问数组、不知道 N 或对 N 有相当严格的上限以及插入和删除很常见且时间紧迫时,它们很有用。中间的插入是 O(N),与数组一样,但实际操作要便宜得多(指针取消引用而不是内存移位),开头的插入是 O(1),最后如果你保持结束指针。

    【讨论】:

      猜你喜欢
      • 2011-11-28
      • 2012-02-03
      • 2018-07-29
      • 2010-12-08
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 2015-03-05
      • 1970-01-01
      相关资源
      最近更新 更多