一、数据结构
1.1 数据结构的基本概念和术语
-
数据
数据是信息的载体,是描述客观事物属性的数、字符以及所有能被输入到计算机中并被计算机程序识别和处理的符号集合。
-
数据元素
数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。一个数据元素可由若干个数据项组成,数据项是构成数据元素的不可分割的最小单位。例如: 学生记录就是一个数据元素,它是由学号、姓名、性别等数据项组成。
-
数据对象
数据对象是具有相同性质的数据元素的集合,是数据的子集。
-
数据类型
数据类型是一个值的集合和定义在此集合上一组操作的总称。
- 原子类型:其值不可再分的数据类型。例如C语言中的整数类型、浮点类型、字符类型。
- 结构类型:其值可以分解为若干成分的数据类型。例如python中的列表、字典等
- 抽象数据类型:抽象数据组织和与之相关的操作。
-
抽象数据类型
抽象数据类型(
ADT
)是指一个数学模型以及定义在模型上的一组操作。image.png -
数据结构
在任何问题中,数据元素都是不独立存在的,而是在它们之间存在着某种关系,这种数据元素相互之间的关系成为结构。数据结构是相互之间存在一种或多种特定关系的数据元素集合。数据结构包含三方面的内容:逻辑结构、存储结构、数据运算。算法的设计依赖数据的逻辑结构,而算法的实现依赖数据的存储结构。
1.2 数据结构的三要素
-
数据的逻辑结构
逻辑结构是指数据元素之间的逻辑关系,即从逻辑关系上面描述数据。它与数据的存储无关,是独立与计算机的。
逻辑结构分类:
-
线性结构
结构中数据元素之间的关系只存在一对一关系
- 一般线性表
- 栈和队列
- 数组
- 广义表
-
非线性结构
-
集合
结构中的数据元素除了除了同属于一个集合的关系外,再无其它关系。
-
树
结构中数据元素之间的关系只存在一对多关系
- 一般树
- 二叉树
-
图
结构中数据元素之间的关系只存在多对多关系
- 有向图
- 无向图
-
-
-
数据的存储结构
存储结构是指数据结构在计算机中的映象,也称物理结构。包括数据元素的表示和关系的表示。数据的存储结构是逻辑结构用计算机语言的实现,它依赖于计算机语言。
物理结构分类:
-
顺序存储结构
把逻辑上相邻的元素存储在物理位置上也相邻的储存单元里,元素之间的关系由存储单元的邻接关系体现。
优点:
- 可以实现随机存取
- 每个元素占用最小的存储空间
缺点:
- 只能使用相邻的一整块存储单元
- 产生较多的磁盘碎片
-
链式存储结构
不要求逻辑上相邻的元素在物理结构上也相邻,借助指示元素存储地址的指针表示元素之间的逻辑关系。
优点:
- 不会出现碎片
- 充分利用存储单元
缺点:
- 每个元素因为存储指针而多占用内存
- 只能实现顺序存取
-
索引存储结构
在存储元素信息时,还建立附加的索引表。索引表中的每一项称之为索引项,索引项一般存储形式:(关键字, 地址)。
优点:
- 数据检索速度快
缺点:
- 增加索引表,额外占用存储空间
- 在增加和删除数据时,要修改索引表,会花费较多的时间。
-
散列存储结构
根据元素的关键字直接计算出该元素的存储地址,又称Hash存储。
优点:
- 检索、增加、删除的操作都很快
缺点:
- 如果散列函数不好,可能会出现元素存储单元冲突,而解决冲突会会增加时间和空间开销
-
-
数据的运算
施加在数据上的运算包括运算的定义和实现。运算的定义是针对逻辑结构,指出运算的功能;运算的实现是针对存储结构,指出运算的具体操作步骤。