什么时候使用哪种数据结构?

When to use which Data Structure?

我正在学习软件开发基础课程中的数据结构。我遇到过以下数据结构:

...等等。我非常了解它们的工作原理,但我很难理解何时何地使用它们。

我可以识别队列数据结构的使用,因为这有助于打印机 and/or 线程排队和优先级排序。

了解数据结构的优点和缺点并在代码中实现它是两回事,我发现前者很困难。

使用上面列出的每个数据结构的简单示例是什么?

例如:

队列:先进先出 → 用于打印机队列对文档进行排队

这取决于你需要什么。如果您阅读并了解有关这些数据结构的更多信息,您将找到实现它们的便捷方法。

也许读过这本书? http://www.amazon.com/Data-Structures-Abstraction-Design-Using/dp/0470128704

当我第一次开始编程时,我很难理解它们,所以我决定先提醒一下。

我尽量做到简单。尝试 Oracle Docs 获取更多详细信息


Struct: 当您需要类似对象的结构时,您可以在其中对相关数据进行分组,请使用结构。尽管在 java 中很少使用结构(因为对象是在它们的位置创建的)

数组:数组是连续的内存。当你想要基于索引的固定时间访问时,与链表不同,数组非常快,所以使用它们。

但是数组的积压是你需要在初始化的时候知道大小。此外,数组不支持更高级别的方法,例如 add()、remove()、clear()、contains()、indexOf() 等


List: 是一个可以使用 Arrays(ArrayList) 实现的接口 或链表(LinkedList)。它们支持前面指定的所有更高级别的方法。

此外,列表会在超出 space 时自行调整大小。您可以指定将创建底层数组或链表的初始大小,但只要达到限制,它就会创建更大尺寸的底层结构,然后复制初始结构的内容。


队列或堆栈:是一种实现技术,并不是真正的数据结构。如果你想要 FIFO 实现,你可以在 Arrays 或 LinkedList 上实现 Queue(是的,你可以在这两种数据结构上实现这种技术) https://en.wikibooks.org/wiki/Data_Structures/Stacks_and_Queues


HashMap: 每当你想存储键值对时,都会用到Hashmap。如果您注意到,您不能为此目的使用数组或链表或任何其他提到的数据结构。键可以是从字符串到对象的任何东西(但注意它必须是一个对象,不能是原始类型),值也可以是任何对象


google 详细了解每个数据结构

这些数据结构都是在程序中根据需要使用的。尝试找出一种数据结构相对于另一种数据结构的优势。这应该让 you.What 的事情变得更清楚 我说不太清楚,但我会试一试

例如,

结构用于创建数据类型,假设您想要 Book 的数据类型并具有书名 Book Structure.

如果您使用链接列表,列表更容易以两种方式访问​​,并且有时比数组更好。队列,好吧,你可以把它们想象成现实生活中的队列,先进先出。所以当你需要设置这个优先级时,你可以使用它们。

就像我说的,寻找一个相对于另一个的优势应该让你清楚。