不同数据结构的实际用途

Joe*_*oel 97 data-structures

有很多关于数据结构的讨论,但我找不到简单的数据结构列表及其实际用途.我正在努力学习面试,我认为这会帮助我和其他许多人一起.我正在寻找这样的东西:

数据结构 - 示例/用于

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

数组 - ......

二叉树 - ......

如果某个地方有这样的资源,请告诉我.

谢谢!

编辑:我的意思是维基百科很好,但在大多数页面上,它们实际上并未列出实际用途.我正在寻找更多的东西.

MXM*_*LLN 93

之前在StackOverflow上找到了一个类似问题的列表:

哈希表 - 用于快速数据查找 - 编译器的符号表,数据库索引,缓存,唯一数据表示.

Trie - 字典,例如在移动电话上用于自动完成和拼写检查的字典.

后缀树 - 大多数文字处理器中使用的快速全文搜索.

堆栈 - 文字处理器中的undo\redo操作,表达式评估和语法分析,许多虚拟机如JVM都是面向堆栈的.

队列 - 运输和运营研究,其中存储和保存各种实体以便稍后处理,即队列执行缓冲器的功能.

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

树 - 分析器,文件系统

基数树 - IP路由表

BSP树 - 3D计算机图形

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

堆 - 在lisp中的动态内存分配

这是RV Pradeep最初发布的答案

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

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

不以应用为重点,通过良好的总结和相关

  • @TonyL.我知道这是一个较老的问题,但我相信使用了2个堆栈或Undo/Redo.撤消操作时,它会从操作堆栈中弹出并放置在重做堆栈上.如果重做,则将其从重做堆栈中弹出并将其推送到操作堆栈.我的术语可能有错,但应该有例子. (5认同)
  • 你的第一个链接坏了 (2认同)
  • 非常好的总结。也许用法列表永远不会结束,但人们明白了。 (2认同)

the*_*xyz 13

我和你在同一条船上.我需要学习技术面试,但记住一份清单并不是很有帮助.如果您有3-4个小时的空余时间,并希望进行更深入的潜水,我建议您退房

mycodeschool
我看过Coursera和其他资源,比如博客和教科书,但我发现它们要么不够全面,要么在光谱的另一端,太过密集,不需要先前的计算机科学术语.

视频中的家伙有很多关于数据结构的讲座.不要介意愚蠢的图画,或者根本没有轻微的重点.您不仅需要了解要选择的数据结构,还需要了解人们在考虑数据结构时需要考虑的其他一些要点:

  • 常见数据结构的优缺点
  • 为什么每个数据结构都存在
  • 它是如何在记忆中实际运作的
  • 具体问题/练习,并决定使用哪种结构以实现最高效率
  • 清醒大0解释

如果你有兴趣,我也会在github上发布笔记.


Jav*_*Ser 6

根据我的理解,数据结构是驻留在任何可以有效管理的电子系统的存储器中的任何数据.很多时候,它是一种记忆游戏或更快的数据访问.就内存而言,基于该最终产品公司的成本管理数据需要进行权衡.有效管理告诉我们如何根据最终产品的主要要求访问数据的最佳方式.这是一个非常高级的解释,但数据结构是一个广泛的主题.大多数访调员都会深入研究他们能够在访谈中讨论的数据结构,具体取决于他们的时间,这些是链接列表和相关主题.

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

  • 原始数据结构是所有数据结构的基本构建块,它们具有连续的内存:boolean,char,int,float,double,string.
  • 复合数据结构是由多个原始数据类型组成的数据结构.类,结构,联合,数组/记录.
  • 抽象数据类型是复合数据类型,可以有效地访问它们,这被称为算法.根据访问数据的方式,数据结构分为线性和非线性数据类型.链接列表,堆栈,队列等是线性数据类型.堆,二叉树和哈希表等是非线性数据类型.

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


dme*_*ter 6

Skienna 的优秀书籍" 算法设计手册"包含一个庞大的算法和数据结构库.

对于大量问题,描述,比较数据结构和算法,并讨论实际用法.作者还提供了实现和原始研究论文的参考.

如果您搜索要解决的问题的最佳数据结构,那么本书很适合放在您的桌面上.这对面试准备也很有帮助.

另一个很好的资源是NIST数据结构和算法词典.


sil*_*cle 3

各种数据结构的任何排名都将至少部分与问题上下文相关。这将有助于学习如何分析算法的时间和空间性能。通常,使用“大O表示法”,例如二分查找的时间为O(log n),这意味着搜索元素的时间是元素数​​量的log(隐含地以2为底)。直观上,由于每一步都会丢弃一半的剩余数据作为不相关的数据,因此元素数量加倍将使时间增加 1 步。(二分搜索的扩展性相当好。)空间性能涉及较大数据集的内存量如何增长。另请注意,大 O 表示法忽略常数因子 - 对于较小的数据集,O(n^2) 算法可能仍比具有更高常数因子的 O(n * log n) 算法更快。复杂的算法在启动时通常需要做更多的工作。

除了时间和空间之外,其他特征还包括数据结构是否排序(树和跳表是排序的,哈希表不是)、持久性(二叉树可以重用旧版本的指针,而哈希表是就地修改的)等。

虽然您需要了解几种数据结构的行为才能对它们进行比较,但了解它们性能差异的原因之一是仔细研究其中一些数据结构。我建议比较单链表、二叉搜索树和跳过列表,它们都相对简单,但具有非常不同的特征。想想查找一个值、添加一个新值、按顺序查找所有值等需要多少工作。

人们推荐了各种关于分析算法/数据结构性能的文本,但真正让它们对我有意义的是学习 OCaml。处理复杂的数据结构是 ML 的强项,当您可以像 C 中那样避免指针和内存管理时,它们的行为会更加清晰。(不过,仅仅为了理解数据结构而学习 OCaml 几乎肯定是一个很长的路要走。:))