Data structures 基本数据结构列表-我缺少什么?

Data structures 基本数据结构列表-我缺少什么?,data-structures,computer-science,Data Structures,Computer Science,最近,我一直在研究我的基本数据结构,试图确保我已经把它们完全搞定了 我所说的“基础”,是指真正的基础。像红黑树和布鲁姆过滤器这样的花式过滤器显然值得了解,但它们通常要么是基本过滤器的增强(红黑树是具有特殊属性以保持平衡的二元搜索树),要么只在非常特定的情况下有用(布鲁姆过滤器) 到目前为止,我对以下数据结构“熟练”: 阵列 链表 堆栈/队列 二叉搜索树 堆/优先级队列 哈希表 然而,我觉得我错过了什么。有什么基本的东西我都忘了吗 编辑:在发布问题后添加这些内容 字符串(由catchmeif

最近,我一直在研究我的基本数据结构,试图确保我已经把它们完全搞定了

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

到目前为止,我对以下数据结构“熟练”:

  • 阵列
  • 链表
  • 堆栈/队列
  • 二叉搜索树
  • 堆/优先级队列
  • 哈希表
然而,我觉得我错过了什么。有什么基本的东西我都忘了吗

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

  • 字符串(由catchmeifyoutry建议)
  • 布景(彼得建议)
  • 图表(由Nick D和aJ建议)
  • B-树(由tloach建议)
    • 我有点犹豫这些是否太花哨了,但我认为它们与基本结构(也足够重要)不同,值得作为基本结构进行研究

作为一项原则,我从来没有说过要尝试[anySearhEngine],但您可以查看以下列表:

你已经忘记了基本的::和./p>< p>树和其他多棵树

< p>我会添加地图,除非你想把它放在集合之下。

因为它们是建模问题的基础,例如:

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

同样,这也是基础。

有关帮助,请阅读Java集合文档。它们将事物分解为抽象层(集合、列表和映射)和实现层(ArraySet、HashSet、ArrayList、LinkedList、TreeMap、HashMap)

有关帮助,请阅读Python集合文档。它们将事物分解为抽象的基类,如集合、序列和映射,这些基类是根据集合的mixin特性构建的


字符串,尽管它们可以在引擎盖下实现为数组(其他一些数据结构也是如此)

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

有些字符串可能被认为不如其他字符串重要:

  • 数学向量/矩阵
  • 图、邻接列表/矩阵
  • 尝试前缀/后缀树
  • 空间索引-四叉树/kd树r-树
  • 流/序列空终止字符串/大整数

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

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

< P>。它们是一些图形算法的基础。

关联数组是表示字典、地图等的通用方式。几乎在每个框架中都可以找到


此外,如果我可以指定一个非基本数据结构,它将是Clojure中的持久位分区前缀哈希尝试。一般来说,我认为持久性是任何数据结构的一个非常重要且经常被忽略的属性。

Cons cell。使用它,您可以构建其他几个数据结构(列表、树等)


我认为你的问题不清楚,因为你把实现和目的混为一谈

以下类型描述了实现:

  • 链表
  • 双链表
  • 排列
  • 哈希表
  • (二元)树
  • “托管”(二进制)树(堆、水平树等,即插入和删除不是直接完成的树,而是通过确保树的某些约束的过程完成的树)
  • 图表(尽管非常花哨)
以下说明目的:

  • 堆栈(表示FILO&可以通过链表实现,也可以通过数组或向量实现)
  • 队列(意味着先进先出&可以通过一个双链表实现,也可以通过其他合理的方式实现)
  • 出列(…)
  • 优先级队列(表示“最高/最低密钥优先”这是一个抽象概念,可以在中实现)
  • 映射/关联数组/字典(表示将键映射到值。通常需要额外的函数将键转换为基础哈希表或树的有效键)
  • 集合(意思是说,它是一个集合,它是可编辑的,可以判断一个值是否是集合中的一个元素。集合中的每一个值在迭代过程中都必须精确显示一次。集合可以是可变的,也可以是不可变的(可以允许添加或删除元素)。可以提供求交、并、差的例程(例如,作为OOP中的方法)。当涉及到实现时,有许多可能性)
嗯,最后一件事我认为非常值得一提:……取决于语言,它们要么是本地存在的,要么是必须效仿的……和C(据我所知)这将是两种命令式语言,通过简单地允许枚举的参数来提供它们……它们可以用来实现列表、树和许多其他好东西……例如,它们非常适合表示枚举和许多其他复杂结构……

一个“函数对象”、“函数指针”或“闭包”不能在具有数组、链表等的某些限制性语言中实现,但它们可能更接近于数据类型而不是数据结构


(在“cord”库中实现的)是我最喜欢的“string”抽象数据结构的实现,但它可能并不是真正的“基本”结构。

堆和prio队列可以被归类为奇特的:几乎所有超出数组和链表的东西都可以归类为