参考清华大学严蔚敏数据结构与算法 适用于考研 & 求职
本教程全部采用C语言实现
Data Struct DS --> 数据之间组织架构/结构
线性 :SeqList List Stack Queue String Array
非线性:Tree Graph
计算机解决问题的大致步骤:
具体问题抽象成数学模型设计算法编写程序测试调整最终解答
一门研究非数值计算的程序设计问题中计算机的操作对象(数据)以及他们之间的关系和操作等的学科。
1. 数据的逻辑结构
2. 数据的物理(存储)结构
3. 数据操作实现的算法
问题 =====》 数学模型 =====》编程实现
数据对象:具有相同性质的数据元素的集合,是数据的一个子集。
数据元素:数据的基本单位
数据项:一个数据元素包含多个数据项 (最小单位)
结构:数据元素之间的关系
数据结构(Data Structure):相互之间存在一种或多种特定关系的数据元素的集合 也就是说数据结构是带“结构”的数据元素的集合
数据结构是一个二元组: Data-Structure = (D, S) 其中D是元素的有限集,S是D上关系的有限集
1. 数据元素之间的逻辑关系
逻辑结构有:集合,线性,树,图
2. 数据元素及其关系在计算机存储器中的形式
物理结构:位(bit),位串,元素,数据域
顺序映像 非顺序映像
一个值的集合和定义在这个值集上的一组操作的总称
ADT : 指数学模型以及定义在其上的一组操作
ADT Triplet{
数据对象:D={e1,e2,e3|e1,e2,e3∈ElemSet(定义了关系运算的某个集合)}
数据关系:R1={,}
基本操作:
InitTriplet(&T,v1,v2,v3)
操作结果:构造了三元组T,元素e1,e2和e3分别被赋以参数v1,v2,v3的值。
DestroyTriplet(&T)
操作结果:三元组T被销毁。
---
Min(T,&e)
初始条件:三元组T已存在。
操作结果:用e返回T的3个元素中的最小值。
}ADT Triplet
算法: 对特定问题求解步骤的一种描述,它是指令的有限序列,其中每条指令表示一个或多个操作。
五大特性:确定性、有穷性、可行性、输入、输出
算法与程序:
算法是解决问题的过程
程序是某种程序设计语言对算法的具体体现
区别:
算法必须有穷,程序可以无穷
算法必须正确,程序可以错误
算法可以用伪代码,程序语言描述,程序只能用编程语言编写并编译运行
好算法:正确、可读、健壮、效率与储存量
时间复杂度
语句频度:语句可重复执行次数
T(n):所有语句之和,n为问题的规模
int sum = 0;
for (int i = 1;i <= n;i++)
sum += i;
//语句频度是n
//T(n) = 1 + n
//O(f(n)) = 1
时间复杂度T(n) = O(f(n)) O表示T(n)与f(n)在n->正无穷时为同阶无穷大
最坏时间复杂度(实际意义)、最好时间复杂度、平均时间复杂度、基本运算频度来分析算法时间复杂度
空间复杂度
算法消耗的存储空间,记S(n) = O(g(n))
除本身所用的指令、常数、变量和输入数据外,还需要一些对数据进行操作的工作单元和存储为实现算法所需一些信息的辅助空间。
算法原地工作时算法所需的辅助空间为常量,O(1)
线性结构特点:
在数据元素的非空有限集中:
(1)存在唯一的一个被称作“第一个”的数据元素;
(2)存在唯一的一个被称作“最后一个”的数据元素;
(3)除第一个之外,集合中的每一个数据元素均只有一个前驱;
(4)除最后一个之外,集合中的每个数据元素均只有一个后继;
线性表的顺序表示指用一组地址连续的存储单元依次存储线性表的数据元素