如果Linked List和Array是基本数据结构,那么什么类型的数据结构是树,哈希表,堆等?

时间:2009-10-03 20:44:02

标签: java c++ data-structures

我正在浏览数据结构在线类,并且提到链表和数组是基本数据结构,因此我的问题是关于哈希表,堆,树和图是那些不是基本数据结构,如果不是,它们是派生自任何其他数据结构?

感谢。

5 个答案:

答案 0 :(得分:2)

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

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

但AFIAK和计算机科学中的许多东西一样,它并没有形式化为“基础数据结构”在数学上可能意味着什么。

答案 1 :(得分:1)

您可以认为数组和链表是基本的,因为基本上只有一种方法可以实现它们(数组的连续对象序列,链接列表的对象的线性链(单链或双链))。 p>

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

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

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

---集合通常是树或散列表,因此根据数组和列表进行传递定义

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

我同意其他海报,CS并没有真正对基础数据结构有“教科书”定义,但你可以很容易地认为它“事实上”是真的。

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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

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

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

  • 它可以描述构建或构建所有其他数据结构的数据结构,或者“将在此类中构建”,或者其他一些公理起点

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

答案 4 :(得分:0)

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

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