Data structures 链表何时是最佳的数据结构

Data structures 链表何时是最佳的数据结构,data-structures,complexity-theory,Data Structures,Complexity Theory,我真的很喜欢这个标题。我的问题是,你能举个例子说明链表是最好的数据结构吗。我一直在努力思考任何真正的问题,在我的代码中,我几乎总是使用哈希映射或列表等 在这里你可以看到各种操作的大O的备忘单。就复杂性而言,链表并不比堆栈或队列好。所以我想知道什么时候有人可能会在上面使用链表,比如说?一个完美的答案会说:“想象一下,我试图做XYZ,如果我用数组做它,它会像这样{enter some code},然而,如果我用链表做它,它会像这样{enter more code}。对于链表来说,复杂性或空间会更好。

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

在这里你可以看到各种操作的大O的备忘单。就复杂性而言,链表并不比堆栈或队列好。所以我想知道什么时候有人可能会在上面使用链表,比如说?一个完美的答案会说:“想象一下,我试图做XYZ,如果我用数组做它,它会像这样{enter some code},然而,如果我用链表做它,它会像这样{enter more code}。对于链表来说,复杂性或空间会更好。”等等

我不希望有人告诉我什么是链表。我知道什么是链表以及它们是如何实现的


P< >考虑如果你有一组人,中间的某个地方你想增加很多人。如果使用传统的ArrayList,则需要移动它后面的所有元素,因此O(N),因为每个人都有索引!在LinkedList中,每个人都是O(1),O(N)位于中间。链接列表在中间添加元素是非常快的,因为你不需要重新索引任何东西,只需调整本地指针。

考虑如果你有一组人,中间的某个地方你想添加很多人。如果使用传统的ArrayList,则需要移动它后面的所有元素,因此O(N),因为每个人都有索引!在LinkedList中,每个人都是O(1),O(N)位于中间。链表在中间添加元素非常快,因为不需要重新索引任何东西,只需调整本地指针。

< P> DD DD对C++标准模板库的调查发现,链接列表是所有常用基本结构中最少使用的。你说得对,它们没什么用处。当您不需要随机访问数组时,当您不知道N或对N有一个合理严格的上限时,以及当插入和删除很常见且时间紧迫时,它们非常有用。中间的插入是O(n),与数组一样,但是实际操作要便宜得多(指针撤销引用,而不是内存移位),开始时的插入是O(1),最后,如果你保留一个结束指针。

某人DD对C++标准模板库的调查,发现链接列表是所有常用基本结构中最少使用的。你说得对,它们没什么用处。当您不需要随机访问数组时,当您不知道N或对N有一个合理严格的上限时,以及当插入和删除很常见且时间紧迫时,它们非常有用。中间的插入是O(n),与数组一样,但是实际操作要便宜得多(指针撤销引用而不是内存移位),开始时的插入是O(1),最后如果保持结束指针。一个链表——因为如果它简单的话——可以比一个更复杂的数据结构更快。链表比其他复杂结构更容易掌握。当元素数量较少时,链表(因为如果它简单的话)可以比更复杂的数据结构更快。当你想要更少的复杂性或根本不需要复杂性时。链表比其他复杂结构更容易掌握。