11

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

  • 定义数据类型。分类和解释数据类型
  • 定义数据结构。分类和解释数据结构
  • 不知何故,它们不是一回事吗?
    考虑一下你正在Tree<E>用 Java 制作一个。您将声明您的类,为其Tree<E>添加方法,并在某个地方Tree<String> myTree = new Tree<>();创建一个树对象。

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

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

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

    4

    3 回答 3

    10

    我想更正以下开始 - 您创建了一个名为“Tree”的类和一个名为“myTree”的对象,而不是一个名为“myTree”的数据类型“Tree”的变量。这些是不同的东西。

    以下是数据类型的定义:

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

    现在,根据 Wikipedia,数据类型中的“类型”有多种定义。

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

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

    还写到:

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

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

    至于数据结构

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

    许多教科书交替使用这些词。对于更复杂的类型,这可能会导致混乱。

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

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

    请参阅:数据结构列表以获取大量可用结构。

    于 2013-09-22T06:49:07.157 回答
    1

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

    抽象数据结构,也称为抽象数据类型,是数据结构的接口。Java 经常使用接口来表示它们;例子是List, Queue, Map, Deque, Set. (但还有其他一些没有用 Java 表示的,例如包/多重集、多重映射、图形、堆栈和优先级队列。)它们的区别在于它们的行为和使用数据结构的方式。例如,集合的特点是禁止重复而不记录顺序,而列表允许重复并记住顺序。队列有一个受限制的接口,只允许您添加到一端并从另一端移除。

    具体数据结构是抽象数据结构的实现。例子是ArrayListLinkedList。这些都是列表的实现;尽管它们的列表界面相同,但程序员可能仍然关心它们不同的性能特征。请注意,LinkedList它还实现了Queue.

    于 2013-09-22T06:21:00.543 回答
    0

    此外,编程语言中存在没有类型系统的数据结构。例如,您可以Map在 LISP 中为 a 建模,或者在 Python 中创建字典。在这里谈论类型会产生误导,因为类型确实只对某些类型系统有意义,或者作为一个抽象概念,如“位于 t 中的所有值的集合”。

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

    于 2013-11-22T14:06:46.830 回答