一、数据结构的基本概念和术语
程序=数据结构+算法
(一)数据、数据元素、数据项和数据对象
-
数据 :是客观事物的符号表示,是所有能输入到计算机中去的描述客观事实的符号。
数值型数据
非数值型数据(多媒体信息处理) -
数据元素:是数据的基本单位。
-
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
三者之间的关系:数据>数据元素>数据项
例:学生表>个人记录>学号、姓名
(二)数据结构
是相互之间存在一种或多种特定关系的数据元素的集合。
数据结构是带“结构”的数据元素的集合,“结构”就是只数据元素之间存在的关系
- 逻辑结构:数据元素间抽象化的相互关系,与数据的存储无关,独立于计算机,它是从具体问题抽象出来的数学模型。
- 存储结构:数据元素及其关系在计算机存储器中的存储方式。
- 线性结构:有且仅有一个开始和一个终端结点,并且所有结点都最多只有一个直接前驱和一个后继。
- 非线性结构:一个结点可能有多个直接前驱和直接后继。
- 顺序存储结构:借助元素在存储器中的相对位置来表示数据元素间的逻辑关系。
Loc(元素i)=Lo+(i-1)*m - 链式存储结构:借助指示元素存储地址的指针表示数据元素间的逻辑关系。
逻辑结构和数据结构的关系
①逻辑结构是数据结构的抽象,存储结构是数据结构的实现
②两者综合起来建立了数据元素之间的结构关系。
(三)数据类型
数据类型是一组性质相同的值的集合体,以及定义于这个集合上的一组运算的总称。
基本数据类型: char int float double void
构造数据类型:数组、结构体、共用体、文件
- 抽象数据类型(ADT)
更高层次的数据抽象;由用户定义,用以表示应用问题的数据模型;由基本的数据类型组成,并包括一组相关的操作。
-
抽象数据类型的表示与实现
- 数据元素被约定为ElemType类型,用户需要根据具体情况,自行定义该数据类型。
- 基本操作的算法描述为以下的函数形式:
函数类型 函数名(函数参数表){
语句序列;
}- 内存的动态分配与释放:
- 赋值语句
- 选择语句
- 循环语句
- 使用的结束语句形式有:
函数结束语句 return;
循环结束语句 break;
异常结束语句 exit(异常代码);- 输入输出语句形式有
输入语句 cin(scanf())
输出语句cout(printf())- 基本函数有
求最大值 max
求最小值 min
(四)算法与算法分析
-
算法定义:为了解决某类问题而规定的一个有限长的操作序列。
-
算法的描述:
- 自然语言
- 流程图
- 程序设计语言
- 伪码
-
算法的特性
输入:有0个或多个输入。
输出:有一个或多个输出(处理结果)。
确定性:每步定义都是确切、无歧义的。
有穷性:算法应在执行有穷步后结束。
可行性:算法是可行的。 -
评价算法优劣的基本标准
- 正确性
- 可读性
- 健壮性
- 高效性
1.算法的时间复杂度
算法的时间复杂度取决于问题的规模和待处理数据的初态。
- 算法中基本语句重复执行的次数是问题规模n的某个函数f(n),算法的时间量度记作T(n)=O(f(n))
- 表示随着n的增大,算法执行的时间的增长率和f(n)的增长率相同
,称渐近时间复杂度,简称时间复杂度。
2.分析算法时间复杂度的基本方法
n*n阶矩阵加法:
for(i=0;i<n;i++)
for(j=0;j<n;j++)
c[i][j]=a[i][j]+b[i][j];
语句频度:重复执行的次数 n*n
T(n)=O(n2)
即:矩阵加法的运算量和问题的规模n的平方是同一个量级。
- 找出语句频度最大的那条语句作为基本语句
- 计算基本语句的频度得到问题规模n的某个函数f(n)
- 取其数量级用符号“O”表示
3.空间复杂度