Data structures 树是数据结构还是抽象数据类型?

Data structures 树是数据结构还是抽象数据类型?,data-structures,tree,abstract-data-type,Data Structures,Tree,Abstract Data Type,我听到很多人把树称为数据结构。但树大多是使用链表或数组实现的。那么,它是否使其成为一种抽象数据类型 给定一种结构类型,我们如何确定它是数据结构还是抽象数据类型?通过谷歌: 在计算机科学中,抽象数据类型(ADT)是一种数学模型 具有相似属性的某类数据结构的模型 行为 很明显,两者都是。如果您谈论的是一个通用树,而没有指定它的实现或使用的任何底层数据结构,那么它本身就是一个抽象数据类型(ADT)。ADT是任何未指定其实现的数据类型 但是,一旦您开始讨论使用链表或数组的具体实现的具体树,那么这种具体树

我听到很多人把树称为数据结构。但树大多是使用链表或数组实现的。那么,它是否使其成为一种抽象数据类型

给定一种结构类型,我们如何确定它是数据结构还是抽象数据类型?

通过谷歌:

在计算机科学中,抽象数据类型(ADT)是一种数学模型 具有相似属性的某类数据结构的模型 行为


很明显,两者都是。

如果您谈论的是一个通用树,而没有指定它的实现或使用的任何底层数据结构,那么它本身就是一个抽象数据类型(ADT)。ADT是任何未指定其实现的数据类型

但是,一旦您开始讨论使用链表或数组的具体实现的具体树,那么这种具体树就是数据结构

排除上述因素后,以下内容可能会帮助您澄清与您的问题相关的其他困惑。如果我错了,请纠正我

数据类型 维基百科中数据类型的定义:

数据类型或简单类型是识别各种数据类型之一的分类

数据类型只是数据的一种分类。它没有关于如何实现这些数据的任何规范。依我看,数据类型只是一个理论概念

例如,任何实数都可以是数据类型real。但与整数一起,它们都可以被归类为数字数据类型,比如数字

正如我刚才指出的,ADT是一种数据类型。但是string,int是否可以被视为ADT

答案是肯定和否定

是的,因为编程语言可以有很多方法来实现string和int;但有一个条件是,在所有编程语言中,这些数据类型必须共享一致的属性

不,因为这些基本数据类型不像堆栈或队列那样抽象。由于这些数据类型在每种编程语言中很少共享一致的属性,因此它们的用户必须了解算术溢出等潜在问题。。两种语言可能都具有int数据类型,但一种语言的范围最大为无穷大,另一种语言的范围最大为2^32。这种技术细节必须知道并不是ADT所承诺的。让我们看看堆栈。在每一种编程语言中,stack都能向您保证像pop、push这样的一致性过程。没有其他关于实现级别的详细信息,您应该了解它们,您只需在每种语言中以您喜欢的方式使用它们

数据结构 让我们看看Wiki中数据结构的定义:

数据结构是在计算机中组织数据以便有效使用的一种特殊方式

如您所见,数据结构与实现有关。它不是概念性的,而是具体的。在我看来,程序中的每一条数据都可以定义为一个数据结构。一根绳子可以。一个整数可以。还有一大堆其他东西,比如LinkedList_堆栈或Array_堆栈,都是数据结构

你们中的一些人可能会争论为什么int是一种数据结构?从编程语言作者的角度来看,它是一种较低层次的数据结构。因为编程语言可以有多种方式在计算机中存储int数据类型。最常见的解决方案是二元补码,其他替代方案是偏移二进制和一元补码等。然而,从用户的角度来看,我们将int视为编程语言提供的开箱即用的原始数据类型,我们不关心它的实现。它只是一种编程语言的组成部分。因此,对于我们用户来说,由编程语言的这些构建块(原始数据类型)构建的任何数据更像是一个数据结构。而对于编程语言的作者来说,构建块是一些较低级别的机器代码,因此对于他们来说int绝对是一种数据结构

简单地说,一件事是否是数据结构实际上取决于我们如何看待它