数据结构(C语言版)(第二版)
线性表
栈和队列
串、数组和广义表
----查找 ----图 ----排序 ----树和二叉树
早期的计算机主要用于数值计算,现在,计算机主要用于非数值计算,包括处理字符、表格和图像等具有一定结构的数据。这些数据内容存在着某种联系,只有分清楚数据的内在联系,合理地组织数据,才能对它们进行有效的处理,设计出高效的算法。如何合理地处组织数据、高效地处理数据,这就是"数据结构"主要研究的问题。
基本概念和术语
- 数据(Data) 是客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号的总称。如数学计算中用到的整数和实数,文本编辑中用到的字符串,多媒体处理的图形、图像、声音及动画等通过特殊编码定义后的数据。
- 数据元素(Data Element) 是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。在有些情况下,数据元素也被称为元素、记录等。数据元素用于完整地描述一个对象,如一名学生记录,树种棋盘的一个格局
- 数据项(Data Item) 是组成数据元素的、有独立含义的、不可分割的最小单位。例如学生基本信息表中的学号
- 数据对象(Data Object) 是性质相同的数据元素的集合,是数据的一个子集。例如:学生基本信息表也可以是一个数据对象。由此可以看出,不论数据元素集合是无限集(如整数集),或是有限集(如字母字符集),还是由多个数据项组成的复合数据元素(如学生表)的集合,只要集合内元素的性质均相同,都可称之为一个数据对象。
数据结构
数据结构(Data Structure)是相互之间存在一种或多种特定关系的数据元素的集合。换句话说,数据结构是带"结构"的数据元素的集合,"结构"就是指数据元素之间存在的关系。
1. 逻辑结构
- 集合结构
数据元素之间除了"属于同一集合"的关系外,别无其他关系。例如,确定一名学生是否为班级成员,只需将班级看作是一个集合结构
- 线性结构
数据元素之间存在一对一的关系。例如,将学生信息数据按照其入学报到的时间先后顺序进行排列,将组成一个线性结构。
- 树结构
数据元素之间存在一对多的关系。例如,在班级的管理体系中,班长管理多个组长,每个组长管理多名组员,从而构成树形结构。
- 图结构或网状结构
数据之间存在多对多的关系。例如,多位同学之间的朋友关系,任何两位同学都可以是朋友,从而构成图状结构或网状结构。
其中集合结构、树结构和图结构都属于非线性结构
2. 存储结构
数据对象在计算机中的存储表示称为数据的存储结构吗,也称为物理结构。
- 顺序存储结构
顺序存储结构是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系,通常借助程序设计语言的数组类型来描述。
- 链式存储结构
顺序存储结构要求所有的元素依次存放在一片连续的存储空间中,而链式存储结构,无需占用一整块存储空间。但为了表示结点之间的关系,需要给每个节点附加指针字段,用于存放后继元素的存储地址。通常借助程序设计语言的指针类型来描述。
数据类型和抽象数据类型
数据类型是一个值的集合和定义在这个值集上的一组操作的总称。例如,C语言中的整型变量,其值集为某个区间上的整数(区间大小依赖于不同的机器),定义在其上的操作为加、减、乘、除和取模的算术运算。
抽象数据类型一般指由用户定义的、表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称,具体包括三部分:数据对象、数据对象上关系的集合以及对数据对象的基本操作的集合。
抽象数据类型的定义格式如下:
ADT抽象数据类型名{
数据对象:(数据对象的定义〉
数据关系:(数据关系的定义〉
基本操作:(基本操作的定义〉
}ADT抽象数据类型名
其中,数据对象和数据关系的定义采用数学符号和自然语言描述,基本操作的定义格式为:
基本操作名(参数表)
初始条件:(初始条件描述〉
操作结果:(操作结果描述〉
基本操作有两种参数: '赋值参数只为操作提供输入值;引用参数以"&"打头,除可提供输 入值外,还将返回操作结果。”初始条件” 描述了操作执行之前数据结构和参数应满足的条件,若 初始条件为空,则省略。”操作结果” 说明了操作正常完成之后,数据结构的变化状况和应返回的 结果。
抽象数据类型的表示与实现
-----还未总结完,后续继续-------