什么是数据结构

计算机科学的各种定义是对实践经验的总结,掺杂了人的主观意识,不像自然定理一样亘古不变,所以建议从历史发展的角度,结合实践经验理解,不要死记硬背。

信息与数据

数据是信息的载体,是描述客观事物的数字、字符、图片、声音等符号的集合,在计算机中以比特的形式存储。
信息是数据的内涵。
少量数据可能包含很多信息。在大数据时代,似乎所有的数据都可能有用,正如黑格尔所说的“存在即合理”。

数据、数据对象、数据元素、数据项之间的关系
数据元素是数据的基本单位,也称为元素、记录等,通常作为一个整体考虑。
数据项是组成数据元素的具有独立含义的、不可分割的最小单位。
数据对象是性质相同的数据元素的集合。

数据类型

数据类型的概念最早出现在高级程序设计语言,发源于硬件,是一种解释计算机内存中信息中的手段。
数据类型规定了变量或表达式所有可能取值的范围,以及在这些值上允许进行的操作。
抽象数据类型(Abstract Data Type,简称ADT)是数据类型的数学抽象,是一个数学模型以及定义在该模型上的一组操作,不考虑其具体实现。
对于硬件工程师来说,数据类型和抽象数据类型是不一样的。
从硬件角度看,CPU会提供一些数据类型,比如字、整数、浮点数,他们直接由电路系统实现。
电路工程师设计一个CPU,要考虑“位”、“字节”,“字”等原子类型,1字节是8位,1个字可能是32位、64位,甚至更大。要考虑如何对整数、浮点数、字符等进行编码,并根据编码规则设计加法器、乘法器等。
可能所有的CPU都提供int类型,但如果编码方式不同,能在其上进行的操作不同,电路实现不同,就不能算作同一种数据类型。
高级程序设计语言提供的数据类型,隐藏了底层的细节,最终通过编译器或解释起转化为机器语言的数据类型来实现。
对于使用高级语言的数据类型的用户来说,

数据结构

数据结构是(数据对象)与(对象中数据元素之间的关系)的集合

形式定义如下:
Data Structure = ( D, S )
D是数据元素的有限集,S是D上关系的有限集

以下几条来自不同教材对数据结构的解释,对比体会。

  1. 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。1
    个人认为,此定义将关系作为集合的定语不够严谨。
  2. 数据结构是数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系。2
  3. 数据结构是ADT的物理实现。3

结构化程序设计的一般原则,程序=数据结构+算法,就是先分析数据的数学模型和要对其进行的操作,确定如何存储数据和怎么实现操作,在这之后编写程序就很容易了。

数据结构,作为一门课程,这门课研究的是数据的逻辑上的组织方法和物理上的存储方法,也就是分析数据元素之间的抽象关系,再研究如何用计算机表示。这门课不是程序设计课2.0,而是要通过精心设计数据结构,为程序带来更高的运行或者存储效率。

所以数据结构包含逻辑结构存储结构两个层次(不是并列)。
编写程序将逻辑结构映射成存储结构,并实现各种操作。

逻辑结构从逻辑关系上描述数据,也就是数据的数学模型,他与数据的在计算机中的存储无关。
任意一个数据元素可以和n(n>=0)个数据元素有逻辑上的关系。

  • 多对多的关系为图结构或网状结构;
  • 一对多为树结构;
  • 一对一为线性结构;
  • 除了同为一个集合外,别无其它关系为集合结构。

可以认为,图结构表示的关系最复杂;树是一种特殊的图;线性结构是一种特殊的树结构,也是一种特殊的图结构;集合是图的极端情况。

存储结构是逻辑结构在计算机中的物理映射。把数据存储到计算机中,通常既要存储数据元素,又要存储数据元素之间的逻辑关系。

未完待续


  1. 严蔚敏,李冬梅,吴伟民,数据结构(C语言版)(第二版) ↩︎

  2. Sartaj Sahni,数据结构、算法与应用 ↩︎

  3. Clifford A.Shaffer, 数据结构与算法分析 ↩︎

你可能感兴趣的:(数据结构)