Data structures 由内而外了解最有用的数据结构是什么? 我感兴趣的是找出人们认为在编程中最有用的数据结构。您发现自己一直在使用什么数据结构

Data structures 由内而外了解最有用的数据结构是什么? 我感兴趣的是找出人们认为在编程中最有用的数据结构。您发现自己一直在使用什么数据结构,data-structures,Data Structures,这篇文章的答案应该能帮助新的程序员为他们的问题找到有用的数据结构。答案可能应包括数据结构、有关数据结构或相关链接的信息、使用数据结构的情况以及为什么选择数据结构是解决此问题的好方法(例如理想的计算复杂性、简单性和理解性等) 每个答案只能是一个数据结构 感谢大家分享智慧和经验。这篇文章太模糊了。有无数的数据结构:数组、字典等。每个数据结构都可以用来解决不同的问题 对于一个特定的问题,要求使用DS会更有效率。这有点像询问木匠工具箱中哪些工具最适合学习使用。它们中的每一种都适合某一类型的工作,你需要同

这篇文章的答案应该能帮助新的程序员为他们的问题找到有用的数据结构。答案可能应包括数据结构、有关数据结构或相关链接的信息、使用数据结构的情况以及为什么选择数据结构是解决此问题的好方法(例如理想的计算复杂性、简单性和理解性等)

每个答案只能是一个数据结构


感谢大家分享智慧和经验。

这篇文章太模糊了。有无数的数据结构:数组、字典等。每个数据结构都可以用来解决不同的问题


对于一个特定的问题,要求使用DS会更有效率。

这有点像询问木匠工具箱中哪些工具最适合学习使用。它们中的每一种都适合某一类型的工作,你需要同样地学习基本的数据结构(地图、列表、包、集合等)。

我认为没有一种数据结构是你必须知道的。每个数据结构都有自己的属性,因此适用于特定的问题。

我发现自己经常使用关联数组,基本上是以字符串作为索引的数组。

链表/双链表/其他变体 每个人都应该知道链表的优点和缺点,由于完全没有使用,许多人似乎忘记了这一点

链表的优点是添加/删除节点非常便宜。与在核心使用阵列的阵列或数据结构不同,它们不需要在扩展时重新分配更多内存

缺点是,它们在搜索方面的性能根本不好。数组中的O(1)查找对于链表来说是O(n)


与所有结构一样,链表只有在某些条件下才是理想的。但是在正确的时间使用它们,它们非常强大。

我总是发现堆栈有无数的用途,尽管在面向对象编程中使用较少。实际上,所有的数据结构都有其用途,而且并不复杂。尽你所能学习。

我不认为这里有一个笼统的答案。它应该被限定到某个用例。 例如,在我十多年的程序员/经理职业生涯中,我从未使用过二叉树。我怀疑这是否意味着二叉树没有用处,但在内核和嵌入式世界中,链表可能更合适。
实际上,当我考虑删除一些例外情况时,我只使用了简单的链表。

即使是在嵌入式系统中,它也可能不是我生活在低层硬件协议世界中使用的唯一结构,可能“上山”使用了更多的数据结构

我喜欢二叉树。特别是八字树变体。它有点类似于自平衡二叉树,但也适应应用程序的使用模式。你几乎从未遇到过最坏的O(n)行为

一个很好的好处是,与其他自平衡二叉树相比,它们更容易编写,需要的代码更少。它是我最喜欢的数据结构之一,因为它在实践中表现得非常好


对于基本的理解,您应该了解一些抽象数据类型(集合、字典、有序列表、队列、堆栈等)以及实现每种类型的几种方法,以及它们之间的相对权衡

这可能需要您了解数组、链表(单链接和双链接)、哈希表、二进制搜索树(对简单的平衡启发法有一些了解)和二进制堆。从内到外了解这些,您将在理解更复杂和有趣的数据结构方面有很长的路要走。另外,如果您已经实现了所有这些库,那么您将拥有一个现成的库,可以用于编程项目(尽管很明显,像Boost之类的更为久经考验的库更适合于生产代码)


这提供了一个非常有用的数据结构词汇表,它可能会对您编写程序的方式产生重大影响。您可能会发现,您一直在解决队列的许多部分实现的问题,例如,您现在可以用规范化实现替换这些部分实现。

我使用最多的数据结构之一(当然,除了向量之外)是哈希表。 如果您需要能够在O(1)时间内搜索大量数据,这是唯一的选择,这意味着搜索时间不会随着集合的大小而增长

问题在于插入和删除时间比其他数据结构中的要长,因此需要使用某种键来搜索集合。每个元素都必须有一个键。 该算法获取每个元素的键,并计算一个哈希代码,该代码指示哈希表中要搜索的插槽。 然后根据实现的不同,它要么跟随落在该存储桶上的项目列表来查找您的项目,要么搜索附近的存储桶。 hastable的大小决定了散列的效率,而散列的效率受键之间散列代码冲突的数量的影响很大

当你需要一张地图,并且地图的预期元素数量超过10个时,就可以使用它。它比其他结构更占用内存,因为它需要表中大量未使用的插槽来提高效率

C#在
字典
中有一个很好的实现,甚至还有一个混合字典,可以在内部决定何时使用哈希表或向量。 任何一本好的编程书籍都会对其进行描述,但维基百科将为您提供良好的服务:

我发现自己经常结合使用数组和“foreach”控制结构来循环遍历项目。在过去,我使用带有数字索引和“fo”的数组