数组VS单链表VS双链表

时间:2018-01-26 21:39:40

标签: arrays search memory linked-list singly-linked-list

我现在正在学习数组,单链表和双链表,这个问题来了

“在快速搜索,更少内存,轻松插入和更新内容时,这三种数据结构之间的最佳选择是什么”

据我所知,数组不能成为答案,因为它具有固定的大小。如果我们想插入新的东西。它并不总是可能的。双链表可以完成任务,但每个节点都需要两个指针,因此存在内存问题,所以我认为单链表将满足所有给定的要求。我对吗?如果我遗漏任何一点,请纠正我。还有一个问题是,我可以将这里给出的一个或多个数据结构组合起来,而不是选择其中一个,以满足所有要求吗?

2 个答案:

答案 0 :(得分:0)

每一项都有其自身的好处和缺点。

对于搜索速度,我说数组更适合由于快速查找时间。 由于数组是一个相同大小的元素序列,因此在索引处检索值只是memoryLocation + index * elementSize。对于链表,整个列表需要遍历。 阵列也赢得了更少的内存和#34;类别,因为不需要存储额外的指针。

对于插入,数组很慢。您需要遍历数组,将内容复制到新数组,分配新数组,删除旧数组...... 链接或双重列表中的插入更快,因为它只是改变一个或两个指针的问题。

最后,一切都取决于用例。你插入很多?那么你可能想要考虑一个非数组结构。 你需要很多快速查找吗?再考虑那些阵列。等。

另见this question

答案 1 :(得分:0)

“在快速搜索,更少内存,轻松插入和更新事物方面,这三种数据结构之间的最佳选择是什么”。

据我所知,Arrays可以达到目的。

  1. 快速搜索:如果数组已排序,您可以进行二进制搜索。你没有在链表中找到那个选项

  2. 更少的内存:数组占用的内存最少(但连续的内存)

  3. 插入:在数组中插入是[i] =“value”的问题。如果超出数组大小,则只需将数据导出到新数组中。这正是HashMaps / ArrayLists在封面下工作的方式。

  4. 更新内容:只有Arrays为您提供随机访问。 a [i] =“新值”..如果您知道索引,则在O(1)时间内更新。