可以更合理使用内存
提高程序的执行效率
C语言本质是操作内存
数据对象、数据元素、数据项
(一)数据结构的三元素
1. 逻辑结构
(1)线性结构
一对一的关系
数据连续
(2)非线性结构
树型:
一对多
图:
多对多
2. 存储结构
数据在计算机尤其是内存中的存储方式
(1)顺序存储
(2)链式存储
(3)索引存储
3. 运算
算法:有限步骤内解决问题的方法
算法不依赖于编程语言
特点:
- 有穷性
- 确定性
- 可行性
- 有0个或多个输入,有一个或多个输出
标准:
- 正确性
- 易读性
- 健壮性:对非法数据的处理能力
- 高效性
- 低存储
(二)时间复杂度
算法的时间复杂度定义为算法中可执行语句的频度之和 记作 T(n)
语句频度是指同一代码执行的次数
T(n)是算法所需时间的一种估值,n 表示问题的规模
算法的时间复杂度的表示方式为:
O(频度); ----------称为 大 O 表示法
假设有三段代码:
a 的时间复杂度为 2
b 的时间复杂度为 2n
c 的时间复杂度为2n^2
如果a、b、c组成一段程序,
那么算法的时间复杂度为
T(n) =T (2+2n+2n^2)
业内表示方法 还需T (2+2n+2n^2)要对进行简化
使用大O表示法的简化流程:
1.去掉运行时间中的所有常数项。
(例如 2+2n+2n^2,直接变为 2n+2n^2)
2.保留最高次幂项。
(2n^2+2n 变成 2n^2)
3.最高项存在但是系数不是1,则把系数置为1。
(2n^2 系数为2 去掉系数 n^2 )
所以,最终a、b和c合并而成的代码的时间复杂度为O(n^2)。
1. 线性阶
O(n)
2. 常数阶
O(1)
3. 平方阶
O(n^2)
4. 三次方阶
O(n^3)
5. 对数阶
O(logn)
6. 时间复杂度排序
O(1)< O(logn) < O(n) < O(nlogn) < O(n^2) <O(n^3) <O(2^n) <O(n!) < O(n^n)
可以带一个数测试,如问题规模n是16
1 < 4 < 16 < 64 < 256 < 4096 < 65536 < 16! < 16^16