解释数据结构和数据类型的区别。

38

在试图回答复合数据类型和数据结构的区别是什么?时,我意识到虽然我很清楚数据类型是什么,以及它与数据结构不同,但我无法用言语表达出这种差异。如果你正在教授入门级计算机科学课程,你会如何解释这个区别?


3
数据结构是指一组被视为一个整体的数据。例如,int是一个简单变量,不能被视为数据结构;而数组是一种数据结构(数组是由多个变量组成的复合变量)。数据类型是一组数据及其操作。两者的主要区别在于,第一种情况下不包括操作。抽象数据类型是数据结构及其操作的数学模型。换句话说,ADT是DS实现的接口。 - Maxim Chetrusca
3个回答

45

数据结构是一种抽象的方式来组织数据,以便可以高效地执行某些操作。例如,二叉树、Fibonacci堆、AVL树或跳表都是数据结构。理论学家描述数据结构并证明其属性,以展示在特定假设下可以高效地解决某些算法或问题。

数据类型是一种(可能无限的)具有共同属性的具体对象类别。例如,“整数”是一个包含所有无限个整数的数据类型,“字符串”是一个包含所有无限个字符串的数据类型,“32位整数”是一个包含所有可用32位表示的整数的数据类型。不要求数据类型在语言中为原始类型 - 例如,在C ++中,类型int是一个原始类型,而这个也是:

struct MyStruct {
    int x, y;
};

在这种情况下,MyStruct 是一种数据类型,代表了所有可能的被标记为 MyStruct 的对象,它们都有两个标记为 xyint

可以使用一个数据类型表示数据结构的所有可能实例。例如,您可以使用此数据类型编码二叉搜索树:

struct BST {
    int data;
    BST* left, *right;
};

简而言之,数据结构是具有一些属性的数学对象,可以通过许多不同的方式实现为数据类型。 数据类型只是可以被具体构造和表示的值类。


2
先生,我不明白抽象数据类型和数据类型之间的区别是什么? - Suraj Jain
@SurajJain ADT是数据结构的抽象,仅抽象地引用数据。它描述了数据结构的接口和行为,但不涉及数据布局。数据类型比数据结构更具体。在特定语言中对数据结构进行具体实现会在该语言中生成一个数据类型。 - Alan
1
“抽象数据类型”是一种没有“实现”的数据类型,它将实现的选择留给程序员,类似于“接口”。请参阅此处以获取Python实现。 - nosahama

20

数据类型无法再缩小,而数据结构可以,因为它由不同类型的多个字段组成。

然而,最好使用类比-数据类型就像原子,而数据结构则像分子。(是的,我知道原子可以被分裂等等,但这个类比目的上应该还是成立的)。


太好了!!!谢谢!!! - beginner
2
Atom 作为类比很合适,因为虽然它可以被分裂,但数据类型也可以。字符串可以被拆分成字符,整数可以被拆分成位。无论如何,数据类型就像原子一样,代表着特定领域内的基本单位。 - svadhisthana

4

数据类型包括基本类型,如int,也包括结构体。结构体由基本类型和/或其他结构体组成。

因此,int是一种数据类型但不是结构体。而struct point { int x; int y; }既是结构体又是数据类型。


1
数据结构这个词在C语言中的struct构造体之外还有另一个更为常见的意义,详见templatetypedef所提供的答案。 - Andy Thomas
它也可以是一个类,基本上是带有方法的结构体。那又怎样? - jun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接