“数据结构”和“数据类型”之间有区别吗?

时间:2013-09-22 06:15:52

标签: language-agnostic

在我学习的Uni考试中经常出现的两个问题是:

  • 定义数据类型。分类和解释数据类型
  • 定义数据结构。对数据结构进行分类和解释
  • 不知何故,他们不是一回事吗? 考虑一下你在Java中使用Tree<E>。您将为Tree<E>声明您的类,向其添加方法以及您将Tree<String> myTree = new Tree<>();创建树对象的某个位置。

    您的数据“结构”现在是数据“类型” 如果您被问到一个问题:变量myTree是什么类型的?答案是Tree<E>。您的数据“结构”现在是数据“类型”。

    现在,由于它们是相同的,因此它们将以相同的方式进行分类,具体取决于您要对其进行分类的基础。原始或非原始。同质或异构。线性或分层。

    这是我的理解。理解是错误的吗?

    3 个答案:

    答案 0 :(得分:9)

    我想更正以下内容 - 您创建了一个名为“Tree”的和一个名为“myTree”的对象,而不是变量< / strong>称为“myTree”的数据类型“树”。这些是不同的东西。

    以下是数据类型的定义:

      

    数据类型或简单类型是标识各种类型数据之一的分类,       例如,实数值,整数或布尔值,用于确定该类型的可能值;       可以对该类型的值进行的操作;数据的含义;       以及可以存储该类型的值的方式。

    现在,as per Wikipedia,数据类型中有“type”的各种定义。

    你提出的问题很好。今天的现代语言中有数据类型,简称为抽象数据类型或ADT。 ADT的定义是:

      

    抽象数据类型(ADT)是具有相似行为的某类数据结构的数学模型;或者对于具有类似语义的一种或多种编程语言的某些数据类型。抽象数据类型是间接定义的,只能通过可能对其执行的操作以及对这些操作的影响(以及可能的成本)的数学约束来定义。

    还写道:

      

    抽象数据类型纯粹是理论实体,用于(除其他外)简化抽象算法的描述,分类和评估数据结构,以及正式描述编程语言的类型系统。然而,ADT可以通过特定数据类型或数据结构以许多方式和许多编程语言实现;或以正式规范语言描述。

    意味着可以使用数据类型或数据结构来实现ADT。

    至于数据结构

      

    数据结构是在计算机中存储和组织数据的一种特殊方式,因此可以有效地使用它。

    许多教科书都可以互换使用这些词。对于更复杂的类型,可能会导致混淆。

    举一个小例子:使用b-tree实现数据库是一种标准。意思是,我们知道这种类型的ADT非常适合这种类型的问题,并且可以更有效地处理它。但是为了在ADT中注入这种有效性,您需要创建一个能够为您提供所需输出的数据结构。

    另一个例子:有很多树,比如b-tree,二叉搜索树,AA树等等。所有这些树基本上都是树的类型,但每个树都有自己的数据结构。

    请参阅:List of data structures获取可用结构的大量列表。

    答案 1 :(得分:1)

    区别在于 abstract 具体的数据结构。一些CS教科书将抽象数据结构称为“数据类型”,这是令人困惑的,因为并非所有数据类型都是数据结构。他们使用“数据结构”来具体表示具体的数据结构。

    抽象数据结构(也称为抽象数据类型)是数据结构的接口。 Java通常使用接口来表示它们;示例包括ListQueueMapDequeSet。 (但是还有其他一些没有在Java中表示过,例如包/多页,多图,图形,堆栈和优先级队列。)它们的行为以及如何使用数据结构是有区别的。例如,集合的特征在于禁止重复而不记录顺序,而列表允许重复并记住顺序。队列具有受限制的界面,只允许您添加到另一端并从另一端删除。

    具体数据结构是抽象数据结构的实现。示例包括ArrayListLinkedList。这些都是列表的实现;虽然它们的列表界面相同,但程序员可能仍然关心它们的不同性能特征。请注意,LinkedList也会实现Queue

    答案 2 :(得分:0)

    此外,编程语言中存在没有类型系统的数据结构。例如,您可以在LISP中模拟Map,或在Python中使用字典。在这里谈论一种类型会有误导,因为类型恕我直言只对某些类型系统有意义,或者作为一个抽象概念,如“所有值的集合”。< / p>

    因此,似乎data structure具有某种抽象类型的具体实现的内涵。如果我们用类型系统OTOH编程语言中的某个对象,我们可能会说“它有XY类型”。