实际使用不同的数据结构

关于数据结构有很多讨论,但是我找不到一个简单的数据结构列表和它们的实际应用。 我正在努力学习面试,我想这会帮助我和其他许多人。 我正在寻找这样的东西:

数据结构 – 示例/用于

哈希表 – 快速数据查找…然后给出一个例子

arrays – …

二叉树 – …

如果有这样的资源,请让我知道。

谢谢!

编辑:我的意思是维基百科是好的,但在大多数页面,他们并没有列出实际用途。 我正在寻找更多的东西。

find类似问题的列表,以前在StackOverflow上:

散列表 – 用于快速数据查找 – 编译器的符号表,数据库索引,caching,唯一数据表示。

Trie – 字典,例如在移动电话上发现的字典,用于自动完成和拼写检查。

后缀树 – 快速全文search在大多数文字处理器中使用。

在字处理程序中,撤销\重做操作,Expression评估和语法分析,许多像JVM这样的虚拟机都是面向堆栈的。

队列 – 运输和运营研究,其中各种实体被存储和保存待处理,即队列执行缓冲区的function。

优先级队列 – 内核中的进程调度

树 – parsing器,文件系统

基数树 – IP路由表

BSP树 – 3D计算机graphics

图表 – 社交网站中的连接/关系,路由,通信networking,数据组织等

堆 – Lisp中的dynamic内存分配

这是RV Pradeep最初发布的答案

其他一些不太有用的链接:

仅列出一些数据结构的应用程序

没有应用的重点,通过良好的总结和相关

我和你在同一条船上。 我需要学习技术面试,但背诵清单并不是很有帮助。 如果您有3-4个小时的空余时间,并且想要进行更深入的潜水,我build议您退房

mycodeschool
我查看了Coursera和其他资源,例如博客和教科书,但是我发现它们不够全面,或者在另一端,它们过于密集,并且没有必要的计算机科学术语。

video中的老兄有一堆关于数据结构的讲座。 不要介意愚蠢的图画,或者微微的口音。 您不仅需要了解要select的数据结构,还需要了解人们在考虑数据结构时要考虑的其他几点:

  • 通用数据结构的优缺点
  • 为什么每个数据结构都存在
  • 它是如何在内存中工作的
  • 具体问题/练习,并决定使用哪种结构以获得最大效率
  • 清醒的大0的解释

如果你有兴趣的话,我还会在github上发布笔记。

由Skienna出色的书“ algorithmdevise手册”包含一个巨大的algorithm和数据结构库。

对于大量的问题,对数据结构和algorithm进行了描述,比较和讨论了实际的使用情况。 作者还提供了实施和原始研究论文的参考。

如果您为您的问题寻找最佳数据结构来解决问题,那么这本书就很棒了。 面试准备也很有帮助。

另一个很好的资源是NIST数据结构和algorithm字典 。

根据我的理解,数据结构是驻留在任何可以有效pipe理的电子系统的内存中的数据。 很多时候,这是一个内存游戏或更快的数据访问。 在内存方面,基于对最终产品公司的成本进行数据pipe理的权衡。 有效pipe理告诉我们如何根据最终产品的主要要求访问数据。 这是一个非常高层次的解释,但数据结构是一个很大的课题。 大多数采访者都会根据自己的时间,在链接列表和相关主题中深入讨论访谈中讨论的数据结构。

现在,这些数据types可以根据逻辑构造和访问的方式分为原始的,抽象的,复合的。

  • 原始数据结构是所有数据结构的基本构build块,它们具有连续的内存:boolean,char,int,float,double,string。
  • 复合数据结构是由多个基本数据types组成的数据结构.class,structure,union,array / record。
  • 抽象数据types是复合数据types,可以有效地访问它们,这被称为algorithm。 根据访问数据的方式,数据结构分为线性和非线性数据types。 链表,堆栈,队列等是线性数据types。 堆,二叉树和散列表等是非线性数据types。

我希望这可以帮助你潜入。

各种数据结构的sorting将至less部分与问题上下文相关联。 这将有助于学习如何分析algorithm的时间和空间性能。 通常,使用“大O符号”,例如二进制search在O(log n)时间内,这意味着search元素的时间是元素数​​量的日志(隐含地在基数2中)。 直观地说,由于每一步都将剩下的一半数据丢弃为无关紧要,所以将元素数量加倍会使时间增加1个步骤。 (二进制search缩放比较好。)空间性能涉及更大的数据集的内存量如何增长。 此外,请注意,大O符号忽略了常数因子 – 对于较小的数据集,O(n ^ 2)algorithm可能仍然比具有较高常数因子的O(n * log n)algorithm更快。 复杂的algorithm通常在启动时需要做更多的工作。

除了时间和空间之外,其他特性还包括数据结构是否被sorting(树和跳过列表sorting,哈希表不存在),持久性(二进制树可以重用旧版本的指针,而哈希表被修改)等等。

虽然您需要了解几种数据结构的行为以便能够比较它们,但要找出它们在性能上存在差异的一种方法,则需要仔细研究一些。 我build议比较单链表,二叉查找树和跳过列表 ,所有这些都比较简单,但具有很不相同的特性。 想想find一个值需要多less工作,添加一个新值,按顺序查找所有值。

人们推荐的关于分析algorithm/数据结构性能的文章有很多,但真正让他们理解的是OCaml。 处理复杂的数据结构是ML的强项,当你可以像C中一样避免指针和内存pipe理时,它们的行为会更加清晰。(了解OCaml只是为了理解数据结构几乎肯定是漫长的。)

我认为只研究数据结构的特征是比较明智​​的。

根据面试官提供给你的情景,挑选合适的人选。

我对那些声称软件工程和编程没有创造力的人说谎。

更less的数据结构的实际应用

红黑树(频繁插入/删除时使用,less量search时使用) – 使用红黑树的K均值聚类,数据库,简单的数据库,在词典内search词,在网上search

AVL树(更多search和更less的插入/删除) – 数据分析和数据挖掘以及涉及更多search的应用程序

最小堆聚类algorithm

我希望这个网站能够成为学习数据结构和algorithm实际应用的好地方。

解决scheme的algorithm问题