Data structures 在商业编程中是否使用链表、双链表等?

Data structures 在商业编程中是否使用链表、双链表等?,data-structures,linked-list,Data Structures,Linked List,像链表这样的数据结构对于真正的编程来说是纯学术性的吗?还是您真的在使用它们?它们是泛型所涵盖的东西,所以您不需要构建它们(假设您的语言有泛型)?我不是在争论理解它们的重要性,只是在学术界之外使用它们。我从前端web、后端数据库的角度进行询问。我肯定有人在某处制造了这些。我是从我的背景问的 多谢各位 编辑:是泛型,因此您不必构建链表之类的?这取决于您使用的语言和框架。大多数现代语言和框架不会让你重新发明这些轮子。相反,它们将提供类似于List或HashTable的内容 编辑: 我们可能一直在使用链

像链表这样的数据结构对于真正的编程来说是纯学术性的吗?还是您真的在使用它们?它们是泛型所涵盖的东西,所以您不需要构建它们(假设您的语言有泛型)?我不是在争论理解它们的重要性,只是在学术界之外使用它们。我从前端web、后端数据库的角度进行询问。我肯定有人在某处制造了这些。我是从我的背景问的

多谢各位


编辑:是泛型,因此您不必构建链表之类的?

这取决于您使用的语言和框架。大多数现代语言和框架不会让你重新发明这些轮子。相反,它们将提供类似于
List
或HashTable的内容

编辑:

我们可能一直在使用链表,但没有意识到这一点。我们不必自己编写链表的实现,因为我们使用的框架已经为我们编写了它们

你也可能对“泛型”感到困惑。您可能指的是通用列表类,如
list
。这与非泛型类列表相同,但元素的类型始终为
T
。它可能是作为一个链表实现的,但我们不必关心这个

我们也不必担心物理内存的分配,中断如何工作,或者如何创建文件系统。我们有操作系统为我们做到这一点。但我们在学校里可能也会被教导同样的信息。

当然。现代语言中的许多“列表”实现实际上是链表,有时与数组或哈希表结合使用以直接访问(通过索引而不是迭代)

链表(尤其是双链表)在“现实世界”数据结构中非常常用

我敢说,每种通用语言都有一个链表的预构建实现,可以作为语言原语、本机模板库(例如C++)、本机库(例如Java)或某些第三方实现(可能是开源的)

话虽如此,在过去的几次中,我自己在为复杂数据结构创建基础架构代码时从头开始编写了一个链表实现。有时完全控制实现是一个好主意,有时您需要在经典实现中添加一个“扭曲”来满足您的特定需求。当涉及到是否编写自己的实现时,没有对错之分,只要您了解备选方案和权衡。在大多数情况下,当然在像C#这样的非常现代的语言中,我会避免使用它

另一点是应该使用列表而不是数组/向量或哈希表。从你的问题中,我知道你知道这里的权衡,所以我不会过多讨论,但基本上,如果你的主要用途是按顺序遍历列表,并且列表大小可能会有很大差异,那么列表可能是一个可行的选择。另一个考虑因素是插入的类型。如果一个常见的用例是“中间插入”,那么列表比数组/向量具有显著的优势。我可以继续讲下去,但这些信息都在经典的CS书籍中:)


澄清:我的答案与语言无关,并且与我所理解的具有链表实现的泛型无关。

我多年来一直在开发业务线应用程序(.NET),我只能想到一个使用链表的实例,即使那时我也不必创建对象


这就是我的经验。

我认为这取决于使用情况,在某些情况下,它们比典型的随机访问容器更快


此外,我认为它们被一些库用作底层集合类型,因此看起来像非链接列表的可能实际上是底层集合类型。

在我上一家公司开发的C/C++应用程序中,我们一直使用双链接列表。它们对我们所做的工作至关重要,这就是实时3D图形。

是的,现实世界中存在使用链表的应用程序,我有时不得不维护一个巨大的应用程序,使其能够充分利用链表

是的,从C++/STL到.net,几乎任何类库都包含链表

我希望它使用数组来代替

在现实世界中,由于分页和CPU缓存大小等原因,链表的速度很慢(链表往往会分散数据,这使得您更可能需要从不同的内存区域访问数据,这在当今的计算机上比使用以一个序列存储所有数据的阵列慢得多)


谷歌“参考地点”获取更多信息。

除了大学的家庭作业外,从未使用过手工制作的列表。

是的,各种数据结构在日常软件开发中都非常有用。在我所知道的大多数语言(C/C++/Python/Objective-C)中,都有实现这些数据结构的框架,这样您就不必重新发明轮子了

是的,数据结构不仅适用于学术界,它们非常有用,如果没有它们,您将无法编写软件(取决于您的工作)


在消息队列、数据映射、哈希表中使用数据结构、保持数据有序、快速访问/删除/插入等等,这取决于需要做什么。

单链表是获得内存效率高的不可变列表的唯一方法,该不可变列表可以组合成“变异”列表。看看Erlang是如何做到的。它可能比数组支持的列表稍慢一些,但在多线程和纯功能实现中它具有非常有用的属性。

是的,我有。这要视情况而定。如果我不会在它们中存储大量数据,或者如果特定的应用程序需要FIFO结构,我将不需要第二次使用它们