1.1数据结构基本概念
数据: 计算机程序加工的原料
数据元素: 数据的基本单位,由若干数据项组成
数据项: 数据元素不可分割的最小单位,例如:学生记录是数据元素,它由学号、姓名、性别等数据项组成
数据对象: 具有相同性质的数据元素的集合,是数据的一个子集,套用数学概念:数据是所有数,子集有整数集N,儿N在数据结构概念中叫整数数据对象
数据类型: 一个值的集合和定义在此集合上的一组操作的名称
- 原子类型:基本数据类型int、bool等
- 结构类型:自定义的结构,内涵多个基本数据类型
- 抽象数据类型 :抽象数据组织及与之相关的操作
数据结构: 相互之间存在一种或多种特定关系的数据元素的集合
1.2数据结构三要素
1.2.1数据的逻辑结构
- 集合:没有关系,只是集合
- 线性结构:一对一的关系
- 树形结构:一对多的关系
- 图状结构或网状结构:多对多的关系
1.2.2 数据的存储结构
- 顺序存储:物理位置相邻
- 链式存储:不要求物理位置相邻,借用指针
- 索引存储:附加索引表记录存储位置,按表存储
- 散列存储:哈希存储
1.2.3数据的运算
施加在数据上的运算包括定义和实现。运算的定义是针对逻辑结构的,指出运算的功能;运算的实现是针对存储结构的,指出运算的具体操作步骤。
1.3算法基本概念
对特定问题求解步骤的一种描述
1.3.1五个特性
- 有穷性:一个算法必须总在执行有穷部之后结束,且每一步都可在有穷时间内完成
- 确定性:对于相同的输入只能得出相同的输出
- 可行性:执行有限次基本运算得到既定目标
- 输入:零个或多个输入
- 输出:一个或多个输出
1.3.2达到目标
- 正确性:正确的解决求解问题
- 可读性:帮助人理解
- 健壮性:输入非法数据可以迅速做出反应,不能输出莫名奇妙的结果
- 效率与低存储量需求
1.4时间复杂度
频度: 该语句在算法中被重复执行的次数
用频度分析时间复杂度
规则: 取阶数最高的,例如O(n2)+O(n)+1=O(n2)
常见时间复杂度阶数比较:常对幂指阶
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
void loveYou(int n){
int i=1;//语句1
while(i<=n){//语句2
i++;//语句3
printf("I Love You %d\n",i);//语句4
}
printf("I Love You More Than %d\n",n);//语句5
}
/*
语句频度:
1:——1次
2:——3001次
3和4:——3000次
5:——1次
T(n)=1+(n+1)+2n+1=3n+3=O(n)
*/
1.5空间复杂度
所耗费的存储空间
原地工作: 算法所需要的辅助空间为常量,即O(1)
递归算法空间复杂度通常为O(n)