0. 叙述
0.1 什么是数据结构?
程序设计 = 数据结构 + 算法
0.2 数据分为逻辑结构和物理结构
逻辑结构:数据对象中数据元素之间的相互关系
物理结构:数据的逻辑结构在计算机中存储形式
0.3 集合结构
集合结构中的数据元素除了同属于一个集合外,它们之间没有其它关系
0.4 线性结构
线性结构中的数据元素之间是一对一的关系
0.5 树形结构
树形结构中的数据元素之间存在一种一对多的层次关系
0.6 图像结构
数据元素多对多关系
0.7 数据元素存储方式
顺序存储:数据元素存放在地址连续的存储单元里(数组)
链式存储:数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的(医院排号系统)
0.8 什么是算法?
解决特定问题求解步骤的描述
0.9 算法5个特征
输入:零个或多个输入
输出:至少有一个或多个输出
有穷性:算法执行有限步骤,不会死循环
确定性:每一个步骤都是确定的,不会有二义性;相同的输入只能有唯一的输出结果
可行性:算法每一步都能通过执行有限次数完成
0.10 算法的设计要求
正确性:
- 程序没有语法错误;
- 合法的输入能够产生满足要求的输出
- 非法输入能够产生满足规格的说明
- 对故意刁难的测试都有满足要求的输出结果
可读性:
- 代码是写给人看的,顺带在机器上运行
健壮性:
- 对于不合法的输入,处理相关的异常
时间效率高、存储量低:
1. 时间复杂度和空间复杂度
1.1 高级语言编写的程序在计算机上运行所耗的时间取决于
- 算法采用的策略和方案
- 编译产生的代码质量
- 问题的输入规模
- 机器执行指令的速度
1.2 例1
- 第一种算法执行了 1+(n+1)+n=2n+2 次
- 第二种算法 1+1=2 次
- 如果将循环看做一个整体,忽略头尾的开销,两个算法的差距是 n 和 1 的差距
1.3 例2
执行次数 100^2 次
1.4 算法效率度量方法
1.5 例3
解析:(函数渐近增长)
1.6 例4
1.7 例5
1.8 总结
1.9 解释1.4
1.10 推导大O阶方法
1.11 常数阶
O(1)
1.12 线性阶
1.13 平方阶
1.14 平方阶 例6
1.15 对数阶 例7
int i = 1, n = 100;
while (i < n) {
i = i * 2;
}