- 数据:对客观事物的符号表示,能输入到计算机中被计算机程序处理的符号的总称
- 数据元素:组成数据的基本单位。eg 小明的一组信息:年龄,名字,学号,身高
- 数据项:数据元素是有若干数据项组成的,数据项是数据不可分割的最小单位 eg:小明的身高/年龄
- 数据结构:有一种或多种特定关系的数据元素的集合。eg 小明和其班上的同学的统计信息表
二元组,Data_Structure=(D,S),D是数据元素的集合,S是D上关系的集合。
eg D={k1,k2,k3},S={(k1,k2),(k2,k3)}
上述数据结构的定义仅是对操作对象的一种数学描述。结构中的关系描述的是数据元素的逻辑关系,因此又称为数据的逻辑结构。然而,讨论数据结构是为了在计算机中实现对他的操作,因此还需研究如何在计算机中表示它。所以数据结构包含以下的三个方面。
- 逻辑结构:指数据元素之间的关系。
- 存储结构:指数据元素和逻辑关系在计算机中的存储映像和实现。包括数据元素的存储表示和数据元素之间关系的存储表示。
- 数据的运算:就是施加于数据的操作,如查找、添加、修改、删除等。在数据结构中运算不仅仅实加减乘除这些算术运算,它的范围更为广泛,常常涉及算法问题。
举例:线性表的初始化、查找、插入、删除操作等 - 逻辑结构和存储结构的关系:①存储结构是逻辑结构用计算机语言的实现 ②逻辑结构是数据结构的抽象,存储结构是数据结构的实现,二者结合起来建立了数据元素之间的结构关系。
那么问题来了,到底怎样描述存储结构呢?
我们借助高级程序语言的数据类型(抽象数据类型)来描述存储结构
以c为例
- 数据类型:一个值的集合+一组操作。 eg int型,其值型为某个区间的整数,定义在其上的操作为加减乘除取模等操作。
- 抽象数据类型:一个数学模型+一组操作
那么什么是抽象数据类型呢?
抽象数据类型和数据类型本质上是一个概念。
如所有高级语言中都有"整型"数据类型,它们的实现方法可以各自不同,但对程序员而言,它们是"相同"的。程序员使用它们时仅需了解它们的数学特性,而不需要了解它们在语言中是如何实现的。换句话说,各种语言中实现的是同一个"整数类型",而这个"整数类"的定义仅对"整数的数学特性"有明确规定。可称这个"整数类型"为"抽象数据类型"。因此,抽象的意义在于数据类型的数学抽象特性。
- 一个抽象数据模块包括定义、表示、实现
- 定义: 三元组(D,S,P)
D是数据对象,S是D上的关系集,P是对D的基本操作集。
ADT 抽象数据类型名{
数据对象:
数据关系:
基本操作:
操作名(参数表) 参数:赋值参数
初始条件 : 引用参数(以&打头,返回操作结果)
操作结果:
}ADT 抽象数据类型名 - 表示、实现:通过处理器以存在的数据类型表示和实现
以下用c代码具体实现抽象数据类型的表示和实现,也是描述数据的存储结构和数据的运算