【发布时间】:2009-10-03 20:44:01
【问题描述】:
我正在学习数据结构在线课程,有人提到链表和数组是基本数据结构,所以我的问题是关于哈希表、堆、树和图这些不是基本数据结构,如果不是的话从任何其他数据结构派生?
谢谢。
【问题讨论】:
标签: java c++ data-structures
我正在学习数据结构在线课程,有人提到链表和数组是基本数据结构,所以我的问题是关于哈希表、堆、树和图这些不是基本数据结构,如果不是的话从任何其他数据结构派生?
谢谢。
【问题讨论】:
标签: java c++ data-structures
列表和数组可以被认为是基本的,因为几乎每一个数据结构都是由这些原始数据结构的片段组成的。
例如,图可以是数组支持或列表支持(通常用于稀疏图)。
但 AFIAK 与计算机科学中的许多事物一样,它并未正式确定“基本数据结构”在数学上的含义。
【讨论】:
您可以考虑数组和链表的基本原理,因为它们本质上只有一种实现方式(数组的连续对象序列,链表的对象的线性链(单链或双链))。
更高级的数据结构可以被认为是“派生的”,因为它们可以以多种方式实现,并且本质上回到了最低级别的数组和链表。例子:
---n-ary 树通常实现为一系列链接节点(如列表),但每个节点包含一个子链接数组。对于二叉树,您通常不会明显地看到数组,因为通常给子级命名左右。
---哈希表可以有多种实现方式。对于链式哈希表,它被实现为链表的(稀疏)数组。对于已探测或已打开地址的哈希表,它只是一个带有冲突逻辑的大数组。
---集合通常是树或哈希表,因此以数组和列表的形式传递定义
---堆栈、队列、向量等只是具有特殊语义的数组。
我同意其他发帖者的观点,即 CS 并没有真正的“教科书”对基本数据结构的定义,但您可以很容易地看到它“事实上”是正确的。
顺便说一句,有趣的问题......
【讨论】:
我不知道计算机科学中“基本数据结构”的公认定义,甚至根本不知道它是一个常规使用的术语。
但这是一个有趣的问题,因为我能想到有用的定义。毕竟,我们在 HLL 中构建的数据结构是由 something 构建的。 (简单地将所有数据结构简化为“图灵完备的语言和平台”似乎很愚蠢。)
所以我可以想到这个术语的两个合理用法:
它可以描述用于构建或可以构建所有其他数据结构的数据结构,或“将在此类中构建”,或某种其他类型的公理化起点.
它可以描述内置于给定语言的数据结构
【讨论】:
在 Lisp 中(无论如何是 Scheme),唯一的基本数据结构是一对。其他一切都是从这种类型构造的。
您必须指定您的语言才能找出该语言的基本数据结构是什么。
编辑:好的,Java 和 C++。我想像 Vector 和 Queue 这样的所有 C++ 库容器都将基于不起眼的数组,但在 Java 中可能会内置更多类型。我想这取决于您如何定义“基本”。
【讨论】:
我不同意。基本数据类型是字数组。这就是所有现代 RAM 芯片所提供的。其他一切都是程序创建的抽象。链表?每个节点使用一个单词作为“下一个指针”,可能使用一个单词作为“前一个指针”,然后使用一些单词作为节点数据。哈希表是在该单词数组之上的另一个抽象。
甚至字节数组也是一种抽象;它们是通过对每个字节进行子寻址来实现的。不过,这种抽象通常由 CPU 提供。
【讨论】: