【问题标题】:If Linked List and Array are fundamental data structures what type of data structure are tree, hash table, heap etc?如果链表和数组是基本数据结构,那么树、哈希表、堆等是什么类型的数据结构?
【发布时间】:2009-10-03 20:44:01
【问题描述】:

我正在学习数据结构在线课程,有人提到链表和数组是基本数据结构,所以我的问题是关于哈希表、堆、树和图这些不是基本数据结构,如果不是的话从任何其他数据结构派生?

谢谢。

【问题讨论】:

    标签: java c++ data-structures


    【解决方案1】:

    列表和数组可以被认为是基本的,因为几乎每一个数据结构都是由这些原始数据结构的片段组成的。

    例如,图可以是数组支持或列表支持(通常用于稀疏图)。

    但 AFIAK 与计算机科学中的许多事物一样,它并未正式确定“基本数据结构”在数学上的含义。

    【讨论】:

      【解决方案2】:

      您可以考虑数组和链表的基本原理,因为它们本质上只有一种实现方式(数组的连续对象序列,链表的对象的线性链(单链或双链))。

      更高级的数据结构可以被认为是“派生的”,因为它们可以以多种方式实现,并且本质上回到了最低级别的数组和链表。例子:

      ---n-ary 树通常实现为一系列链接节点(如列表),但每个节点包含一个子链接数组。对于二叉树,您通常不会明显地看到数组,因为通常给子级命名左右。

      ---哈希表可以有多种实现方式。对于链式哈希表,它被实现为链表的(稀疏)数组。对于已探测或已打开地址的哈希表,它只是一个带有冲突逻辑的大数组。

      ---集合通常是树或哈希表,因此以数组和列表的形式传递定义

      ---堆栈、队列、向量等只是具有特殊语义的数组。

      我同意其他发帖者的观点,即 CS 并没有真正的“教科书”对基本数据结构的定义,但您可以很容易地看到它“事实上”是正确的。

      顺便说一句,有趣的问题......

      【讨论】:

        【解决方案3】:

        我不知道计算机科学中“基本数据结构”的公认定义,甚至根本不知道它是一个常规使用的术语。

        但这是一个有趣的问题,因为我能想到有用的定义。毕竟,我们在 HLL 中构建的数据结构是由 something 构建的。 (简单地将所有数据结构简化为“图灵完备的语言和平台”似乎很愚蠢。)

        所以我可以想到这个术语的两个合理用法:

        • 它可以描述用于构建或可以构建所有其他数据结构的数据结构,或“将在此类中构建”,或某种其他类型的公理化起点.

        • 它可以描述内置于给定语言的数据结构

        【讨论】:

        • 你能解释一下第二点吗:它可以描述内置到给定语言中的数据结构吗?
        • 通常有一个基本的数组概念,以及对对象的引用。 (引用是包装指针的类型安全层。)在 C 中,您有真正的指针。在 Java 中,您有对象引用和数组。在 Ruby 中,您拥有这些加哈希表。使用内置语言功能存在合理的偏见,尤其是在课堂上。 (您的讲师可能对看到您实例化从 Collection 派生的对象不感兴趣。:-)
        【解决方案4】:

        在 Lisp 中(无论如何是 Scheme),唯一的基本数据结构是一对。其他一切都是从这种类型构造的。

        您必须指定您的语言才能找出该语言的基本数据结构是什么。

        编辑:好的,Java 和 C++。我想像 Vector 和 Queue 这样的所有 C++ 库容器都将基于不起眼的数组,但在 Java 中可能会内置更多类型。我想这取决于您如何定义“基本”。

        【讨论】:

        • @Java 和 C++ 是考虑的语言
        【解决方案5】:

        我不同意。基本数据类型是字数组。这就是所有现代 RAM 芯片所提供的。其他一切都是程序创建的抽象。链表?每个节点使用一个单词作为“下一个指针”,可能使用一个单词作为“前一个指针”,然后使用一些单词作为节点数据。哈希表是在该单词数组之上的另一个抽象。

        甚至字节数组也是一种抽象;它们是通过对每个字节进行子寻址来实现的。不过,这种抽象通常由 CPU 提供。

        【讨论】:

        • 原则上同意,但我知道很少有架构师在设计系统时从那个级别开始......
        • 英特尔的架构师做 :)
        猜你喜欢
        • 2016-10-31
        • 2020-11-17
        • 1970-01-01
        • 2016-10-04
        • 2017-08-27
        • 2021-06-25
        • 2013-06-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多