基本数据结构清单 - 我缺少什么?

时间:2009-12-07 16:13:54

标签: data-structures computer-science

我最近一直在研究我的基本数据结构,试图确保我已经冷落它们。

“基本”,我指的是真正基本的。像红黑树和布鲁姆过滤器这样的花哨的东西显然值得了解,但它们通常要么是基本的增强(红黑树是具有特殊属性的二元搜索树以保持平衡)或者它们仅在非常有用特定情况(布卢姆过滤器)。

到目前为止,我在以下数据结构中“流利”:

  • 阵列
  • 链接列表
  • 栈/队列
  • 二进制搜索树
  • 堆/优先级队列
  • 哈希表

然而,我觉得我错过了什么。我有什么基本的遗忘吗?

编辑:在发布问题后添加了这些

  • 字符串(由catchmeifyoutry建议)
  • 集(彼得建议)
  • 图表(由Nick D和aJ建议)
  • B-Trees(由tloach建议)
    • 关于这些是否过于花哨,我有点不确定,但我认为它们与基本结构(并且非常重要)有足够的不同,值得研究作为基础。

18 个答案:

答案 0 :(得分:10)

Sets

作为一个原则,我从不说试试[anySearhEngine],但你可以查看这个列表: http://en.wikipedia.org/wiki/List_of_data_structures

答案 1 :(得分:10)

Graph data structure也是基础。

答案 2 :(得分:5)

我认为你的问题不清楚,因为你正在混合实施和目的......

以下类型描述了实现:

  • 链表
  • 双链表
  • skip list
  • 阵列
  • dynamic array
  • 哈希表
  • (二元)树
  • “托管”(二进制)树(堆,水平树等,即不直接插入和删除的树,但通过保证树的某些约束的过程)
  • 图(虽然很花哨)

以下描述目的:

  • stack(表示FILO&可以通过链表实现,也可以通过数组或向量实现)
  • 队列(意味着FIFO&可以通过双链表实现,或者可以通过其他合理的方式实现)
  • dequeue(...)
  • 优先级队列(表示“最高/最低密钥先出”这是一个抽象概念,可以在many different ways中实现)
  • map / associative array / dictionary(表示您将键映射到值。通常需要额外的函数将键转换为基础哈希表或树的有效键)
  • set(意思是,它是一个集合,可迭代并且可以判断一个值是否是集合的元素。每个值,即集合的元素在迭代期间必须恰好一次。是否可变(可以允许添加或删除元素)。可以提供交集,并集,差异的例程(例如,作为OOP中的方法)。当涉及到实现时,有许多可能性)

好吧,我认为最后一件事值得一提:algebraic data types ...取决于语言,它们要么本地存在,要么必须模仿它们...... {{3}和C#(据我所知)将是两种命令式语言,通过简单地允许枚举参数来提供它们......它们可用于实现列表,树和许多其他好东西...例如,它们是完美地代表Haxe和许多其他复杂的结构...

答案 3 :(得分:4)

B树和其他多树

答案 4 :(得分:4)

字符串,尽管它们可以作为数组实现(与其他几种数据结构一样)。

与用户交互的任何程序都将使用字符串。 知道如何操纵字符串很重要。

答案 5 :(得分:2)

缺点细胞。有了它,您可以构建其他几个数据结构(列表,树等)

http://en.wikipedia.org/wiki/Cons

答案 6 :(得分:2)

  

Matrices

     

Graphs

答案 7 :(得分:2)

Quadtree s,作为最简单的空间索引。

答案 8 :(得分:1)

Tuples

另外,如果我可以提名一个非基本数据结构,它将是来自Clojure的持久位分区前缀Hash Tries。总的来说,我认为持久性是任何数据结构中非常重要且经常被忽视的属性。

答案 9 :(得分:1)

有些人可能被认为不如其他人那么重要:

  • 数学向量/ matricies
  • 图表,邻接列表/ matricies
  • 尝试前缀/后缀树
  • 空间索引 - 四叉树/ kd-trees r-trees
  • streams / sequences null终止字符串/大整数

答案 10 :(得分:1)

Bit array不是基本的,但它非常方便,可以使用整数(和按位运算符)有效表示

答案 11 :(得分:1)

关联数组是说字典,地图等的通用方式。您几乎可以在每个框架中找到它。

http://en.wikipedia.org/wiki/Associative_array

答案 12 :(得分:0)

“函数对象”,“函数指针”或“闭包”无法在具有数组,链接列表等的某些限制性语言中实现。但也许它们更接近数据类型而不是数据结构。 / p>

"rope" implementation(在“cord”库中实现)是我最喜欢的“字符串”抽象数据结构的实现,但也许它并不是真正的“基础”。

答案 13 :(得分:0)

您可以考虑union/find datastructures。它们是一些图算法的基础。

答案 14 :(得分:0)

如需帮助,请阅读Java Collections文档。它们分解为抽象层(Set,List和Map)和实现层(ArraySet,HashSet,ArrayList,LinkedList,TreeMap,HashMap)。

如需帮助,请阅读Python Collections文档。它们将事物分解为抽象基类,如Set,Sequence和Map,它们是从集合的mixin特性构建的。

答案 15 :(得分:0)

Matrices因为它们可以作为建模问题的基础,例如:

  • 图表
  • 仿射变换
  • 解决线性系统
  • 马尔可夫链

答案 16 :(得分:0)

我会添加地图,除非您想要将其视为集合。

答案 17 :(得分:0)

您忘记了基本内容:structobjectenums