【问题标题】:List of fundamental data structures - what am I missing? [closed]基本数据结构列表 - 我错过了什么? [关闭]
【发布时间】:2010-12-24 01:51:43
【问题描述】:

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

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

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

  • 数组
  • 链接列表
  • 堆栈/队列
  • 二叉搜索树
  • 堆/优先队列
  • 哈希表

但是,我觉得我错过了一些东西。有什么基本的我忘记了吗?

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

  • 字符串(catchmeifyoutry 建议)
  • 套装(Peter 建议)
  • 图表(由 Nick D 和 aJ 建议)
  • B 树(由 tloach 建议)
    • 我对这些是否太花哨有点犹豫,但我认为它们与基本结构有足够的不同(而且足够重要),值得作为基础进行研究。

【问题讨论】:

  • 堆和优先队列可以归类为花哨的:P
  • 可能任何超出数组和链表的东西都可以归类为花哨的:P
  • 'fancyness' 几乎可以肯定是一个模拟量表而不是二元选择,如果它甚至可以很好地定义的话。

标签: data-structures computer-science


【解决方案1】:

Sets

原则上我从不说尝试 [anySearhEngine],但您可以查看此列表: http://en.wikipedia.org/wiki/List_of_data_structures

【讨论】:

  • Set 与其说是基本的数据结构,不如说是一种建模结构。
  • 恕我直言,这是一个非常基础的数据结构
  • 哇哦。我确实搜索过这样的东西(在维基百科和谷歌上),但不知何故我没有碰到这个列表。非常感谢。
  • 这是一个数学概念,与语法无关
  • 我认为集合是一种数据结构,就像队列和堆栈一样。它们是一种“非终端”数据结构。它们可以用许多不同的方式表示,但它们都应该提供一致的界面。
【解决方案2】:

Graph data structure 也是基本的。

【讨论】:

  • 图是一种模型结构和数据结构。 +1
  • 太棒了。我一直在研究各种图算法,但我应该刷新一下数据结构本身。
【解决方案3】:

我认为您的问题不清楚,因为您将实现和目的混为一谈......

以下类型描述了实现:

  • 链表
  • 双链表
  • skip list
  • 数组
  • dynamic array
  • 哈希表
  • (二叉树)
  • “托管”(二叉树)树(堆、分级树等,即插入和删除不是直接完成而是通过保证树的某些约束的过程来完成的树)
  • 图表(虽然很花哨)

以下描述目的:

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

好吧,我认为最后一件事非常值得一提:algebraic data types ... 根据语言的不同,它们要么原生存在,要么您必须模仿它们... Haxe 和 C# (据我所知)将是两种通过简单地允许枚举参数来提供它们的命令式语言......它们可用于实现列表、树和许多其他好东西......例如,它们非常适合表示@ 987654326@s 和很多其他复杂的结构...

【讨论】:

  • 我明白你在说什么,但它们仍然是不同的数据结构;您可以在不了解堆栈本身的情况下精通链表、数组和其他实现堆栈的方式,并且您可以在不了解堆栈实现的情况下精通堆栈。我试图列出基本的数据结构,无论它们是实现还是接口。
  • 多么好的答案!
【解决方案4】:

B-Trees 和其他多树

【讨论】:

  • B-Trees 被覆盖了,你是在暗示花哨的吗?
  • Vainstah:B 树不同于二叉搜索树。好叫 tloach,我已经有一段时间没有在这些方面刷新自己了。
  • 这样的话,按照他的定义应该是花哨的。
  • 我认为“花哨”和“基本”是错误的二分法; B-Tree 两者都是,因为它们是几乎所有大型数据库的绝对必要组件。
  • 另外,它们作为一个有趣的例子来说明如何在特定硬件约束下优化数据结构以提高性能。
【解决方案5】:

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

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

【讨论】:

  • 可变数据类型,很多实现都被认为是基本数据类型......但是 +1 因为它们太重要了,不容忽视。
  • 很公平。对于字符串是否值得与数组分开考虑,我有点犹豫不决,但这并没有什么坏处,尤其是因为它们如此重要。
【解决方案6】:

【讨论】:

    【解决方案7】:

    Quadtrees,作为最简单的一种空间索引。

    【讨论】:

    • 有趣而复杂,但 imo 因为它与二维空间密切相关,所以它是基本的。
    • 我还可以建议 R-trees 或 QR-trees 吗?它们是四叉树的一个有趣的扩展。 en.wikipedia.org/wiki/R-tree
    • 好吧,澄清一下,R-tree 更像是 B-tree 的扩展,而 QR-tree 是四叉树和 R-tree 的融合
    • 这些都是 GIS 特有的。
    • 完全不是 GIS 特有的,适用于任何拥有二维数据的地方
    【解决方案8】:

    缺点单元格。有了它,您可以构建其他几种数据结构(列表、树等)

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

    【讨论】:

      【解决方案9】:

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

      【讨论】:

      • +1 每天使用它们 - 非常简单快捷!
      【解决方案10】:

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

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

      【讨论】:

        【解决方案11】:

        Tuples.

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

        【讨论】:

          【解决方案12】:

          有些可能被认为不如其他基础:

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

          【讨论】:

            【解决方案13】:

            您忘记了基本的:structobjectenums

            【讨论】:

            • 这些结构是特定于语言的,可以在基本类型之上进行序列化。
            • 我认为这些是数据类型,而不是数据结构。我想双方都有很大的争论,但我也知道这些冷酷的,所以这与我的目的无关。好的电话虽然:)
            • 结构是一种从名称到值的映射。而 C 语言 struct 是特定于语言的。 “记录”(用 COBOL 或 Pascal 的说法)确实存在于多种语言中。这是“类”定义的基础。所以我认为它不是特定于语言的,而是几乎无处不在。
            • 我很想知道有一种编程语言不支持类似结构的构造!
            【解决方案14】:

            我会添加地图,除非你认为它是在集合之下。

            【讨论】:

              【解决方案15】:

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

              如需帮助,请阅读 Python 集合文档。他们将事物分解为抽象基类,如 Set、Sequence 和 Map,这些基类由集合的 mixin 特性构建而成。

              【讨论】:

              • 题外话,他不是问编程手册的名字。
              • 抱歉,这些语言参考资料中的参考资料会回答这个问题。
              • 大多数这些类型的存在是为了提供复杂性保证,因此不是基本的。我怀疑这些手册是否会以一种语言中立的方式讨论容器。
              • 答案的“阅读”部分是核心。阅读说明。了解其他人认为基本数据结构是什么。
              • @S.洛特——我同意,几乎没有跑题。这不像是你在为出版商讨价还价。
              【解决方案16】:

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

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

              【讨论】:

              • 不是基本的 imo,因为它们可以使用数组来模拟。
              • 什么不能用数组模拟?
              • @jk 一切都可以,也许您应该将答案更改为“稀疏”矩阵。这些不应该使用数组来模拟,我认为这是基本的。
              【解决方案17】:

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

              【讨论】:

                【解决方案18】:

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

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

                【讨论】:

                  猜你喜欢
                  • 2021-06-23
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-11-07
                  • 2013-02-08
                  • 1970-01-01
                  相关资源
                  最近更新 更多