Answers:
在以前的StackOverflow上的类似问题中找到了列表:
哈希表-用于快速数据查找-用于编译器,数据库索引,高速缓存,唯一数据表示的符号表。
Trie-字典,例如在手机上可以自动完成和拼写检查的字典。
后缀树-大多数文字处理器中使用的快速全文本搜索。
堆栈-文字处理器中的撤消/重做操作,表达式评估和语法分析,许多虚拟机(如JVM)都是面向堆栈的。
队列-运输和运筹学,存储并保存各种实体以便以后处理,即队列执行缓冲区的功能。
优先级队列-内核中的进程调度
树-解析器,文件系统
基数树-IP路由表
BSP树-3D计算机图形学
图表-社交网站中的连接/关系,路由,通信网络,数据组织等。
堆-Lisp中的动态内存分配
这是RV Pradeep最初发布的答案
其他一些不太有用的链接:
我和你在同一条船上。我需要学习技术面试,但是记住一份清单并没有真正的帮助。如果您有3-4个小时的空闲时间,并且想进行更深的潜水,建议您退房
mycodeschool
我研究过Coursera和其他资源(例如博客和教科书),但是我发现它们要么不够全面,要么处于另一端,对先决条件的计算机科学术语过于密集。
视频中的家伙花了很多关于数据结构的演讲。不要介意那些愚蠢的图画,或一点点口音。您不仅需要了解选择哪种数据结构,还需要了解人们在考虑数据结构时要考虑的其他几点:
根据我的理解,数据结构是指任何可以有效管理的电子系统内存中的数据。很多时候,这是一种内存游戏或更快的数据访问性。再次在内存方面,需要根据最终产品公司的成本对数据进行管理。有效管理告诉我们如何根据最终产品的主要需求来最好地访问数据。这是一个非常高级的解释,但是数据结构是一个广泛的主题。大多数访问者会深入研究他们可以根据自己的时间在访问中讨论的数据结构,这些结构是链接列表和相关主题。
现在,根据这些数据的逻辑构造和访问方式,它们可以分为原始,抽象,复合。
我希望这可以帮助您潜水。
Skienna撰写的出色的“ 算法设计手册”一书包含了大量的算法和数据结构。
对于大量问题,描述,比较了数据结构和算法,并讨论了实际用法。作者还提供了对实现和原始研究论文的参考。
如果您搜索最佳数据结构来解决问题,那本书很适合将其放在您的办公桌上。这对面试准备也很有帮助。
另一个很棒的资源是《NIST数据结构和算法词典》。
很少有数据结构的实际应用
红黑树(用于频繁的插入/删除和少量搜索时使用)-使用红黑树,数据库,思维简单的数据库,在词典中搜索单词,在网络上搜索的K均值聚类
AVL树(更多搜索,更少插入/删除)-数据分析和数据挖掘以及涉及更多搜索的应用程序
最小堆-聚类算法
各种数据结构的任何排名将至少部分地与问题上下文相关。这将有助于学习如何分析算法的时空性能。通常,使用“大O表示法”,例如,二进制搜索的时间为O(log n),这意味着搜索元素的时间为元素数量的对数(隐式以2为底)。直观地讲,由于每个步骤都将无关紧要的剩余数据丢弃了一半,因此,将元素数量加倍会使时间增加1步。(二进制搜索的扩展性很好。)空间性能关系到较大数据集的内存量如何增长。另外,请注意big-O表示法会忽略常数因子-对于较小的数据集,O(n ^ 2)算法可能仍然比常数因子更高的O(n * log n)算法更快。
除了时间和空间外,其他特征还包括是否对数据结构进行排序(对树和跳过列表进行排序,对哈希表不进行排序),持久性(二进制树可以重用旧版本的指针,而对哈希表进行适当修改)等。
虽然您需要学习几种数据结构的行为以进行比较,但是要弄清它们在性能上为何不同的一种方法是仔细研究其中的几种。我建议比较单链接列表,二进制搜索树和跳过列表,所有这些都相对简单,但是具有非常不同的特征。考虑一下查找值,添加新值,按顺序查找所有值等工作量。
人们推荐有关分析算法/数据结构性能的各种文章,但是真正使它们有意义的是学习OCaml。处理复杂的数据结构是ML的强项,当您可以避免像C那样避免使用指针和内存管理时,它们的行为就更加清晰了。(虽然学习OCaml只是为了理解数据结构是很长的路要走:。)