绪论
绪论
1.1 数据结构的研究范围
1.计算机解决具体问题:抽象出适当的数学模型==》设计解决的算法==》编写程序
2.数值问题
- 生产计划制定——线性规划
- 物流中心选址——遗传算法、模拟退火算法
- 人口增长——微分方程
3.非数值问题
- 检索系统——线性结构
- 人机对弈——树形结构
- 交通/道路问题——图、网状结构
4.数据结构+算法=程序设计
1.2 基本概念与术语
1.2.1 数据相关概念
- 数据:计算机处理对象的总称,如字符、图片、数字等
- 数据元素:讨论的基本单位,通常在程序中作为整体处理,有时也称为记录、结点(node)
- 数据项:组成数据元素的基本单位,又分为原子项和组合项
数据元素即一条书目记录,记录中的字段为数据项。其中编号、书名、作者为原子项,出版时间为组合项,由出版信息组成,年、月是出版时间信息的数据项
- 关键码:唯一识别数据元素的数据项
- 关系:集合中元素之间的某种相关性,一种或多种。用数学表达式为<x,y>
1.2.2 数据结构相关概念
- 数据对象:性质相同的数据元素的集合。如Digit={0,1,2,3,4,5,6,7,8,9}
- 结构:数据元素相互之间的关系
- 序偶: 两个数据元素X和Y之间存在某种特定关系<x,y>
1.2.3 数据结构
1.2.3.1 逻辑结构(面向问题,与计算机无关)
类型:
- 集合:与数学中的集合概念相同(元素之间除了“同属于一个集合”的关系外,别无其它关系)
- 线性结构:结构中的数据元素存在 1:1 的关系
- 树形结构:结构中的数据元素存在 1:M 的关系
- 图状或网状结构:结构中的数据元素存在 M:M 的关系
表示方式:
- 图示法:每个结点之间用有向线段连接,用于表示结点之间的前驱和后继关系
- 解析表示法:D_S= (D,R) , 其中D = {d1, d2,…, dn}, R={r}, r = {<di-1, di>| di∈D, 1<i≤n}
1.2.3.2 物理结构(存储结构面向计算机)
- 顺序存储结构: 借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系(公式化描述)
- 链式存储结构: 借助指示元素存储地址的指针表示数据元素之间的逻辑关系(链式描述)
- 索引存储结构: 是通过建立索引表存储结点信息的方法,可通过该地址找到结点其它信息。有稠密索引和稀疏索引之分。是顺序索引的一种推广
- 散列存储结构: 是根据结点的关键字直接计算出该结点的存储地址的方法。是索引法的一种延伸和扩展
1.2.3.2 运算集合
操作集合的定义由问题决定;
操作的实现与数据在计算机内的存储方式有关
1.3 数据类型和抽象数据类型
- 数据类型:是一组性质相同的值的集合和定义在这个值集上的一组操作的集合;又分为原子类型与结构类型(同上)
在C语言中,数据类型有char、int、float、double等,运算符集合为+、-、*、/、%、++、–、&&、||等
- 抽象数据类型(ADT):确定了一个模型,但将模型的实现细节隐藏起来;它定义了一组运算,但将运算的实现过程隐藏起来
1.4 算法描述和分析
- 特性:有穷性;确定性;可行性;有输入;有输出
- 设计原则:正确性、可读性、健壮性、高效率
- 表示方式:条列式、流程图、伪码、程序语句
- 衡量准则
- 时间复杂度(大O表示法)
加法规则:T(n, m) = T1 (n) + T2 (m) = O(max (f (n), g (m)))
乘法规则: T (n, m) = T1 (n) * T2 (m) = O(f (n)*g (m))
c < log2n < n < nlog2n < n^2 < n^3 < 2^n < 3^n < n! < n^n - 空间复杂度
1.指令空间:存储经过编译之后的程序指令所需的空间。
2.数据空间:存储所有常量和所有变量值所需的空间。由两部分组成:存储常量和简单变量、存储复合变量。
3.环境栈空间:保存函数调用保存时恢复运行所需要的信息储经过编译之后的程序指令所需的空间