【问题标题】:Array VS single linked list VS double link list数组 VS 单链表 VS 双链表
【发布时间】:2018-01-26 21:39:40
【问题描述】:

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

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

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

【问题讨论】:

  • 现在的内存已经不像以前那么珍贵了,我推荐一种具有更多特性和功能的数据结构,以适应任何和所有出现的需求。双链表是 3 中最强大的。

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


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 我同意你的所有观点,除了第三点。因为假设一个购物中心的应用程序来维护不同产品的库存。在这种情况下,当新产品到货时,它应该添加到我们阵列已经填充的库存中吗?在这种情况下,我不想编辑代码以将元素导出到另一个数组中。我需要像列表这样有机增长的东西
  • 我同意!同样,其中很多取决于应用程序。 HashMap 的更新将使用数组和链表的组合:)
【解决方案2】:

这些都有自己的优点和缺点。

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

对于插入,数组很慢。您需要遍历数组,将内容复制到新数组,分配新数组,删除旧数组... 在链表或双链表中插入要快得多,因为只需更改一两个指针即可。

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

另见this question

【讨论】:

  • 您对申请商城维护不同产品库存有什么看法?我的意思是在这种情况下,插入、更新和搜索以相同的速度发生。那么什么是最好的呢?
  • 如果没有更多信息,不可能得出这样的结论。我的建议是选择一个可行的解决方案,然后测量插入、更新、搜索的实际速率,不要忘记简单的查找。使用该数据作为三种不同性能测试(数组、列表和链接)的输入,并查看哪种数据结构最适合您的情况。
猜你喜欢
  • 2010-09-27
  • 1970-01-01
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
  • 2016-05-25
  • 2012-07-12
  • 2021-06-13
  • 1970-01-01
相关资源
最近更新 更多