第一章:数据结构绪论
程序设计=数据结构+算法
- 数据
可以输入到计算机中,并能被计算机程序处理的符号集合(包括数值类型和声音,图像,视频等非数值类型)
- 数据元素(记录)
组成数据的,有一定意义的基本单位。可以理解为class的父子类关系,如
class Cat/Dog/Duck extends Aniaml
;猫,狗,鸭是动物类的数据元素
- 数据项
一个元素可以由若干个数据项组成,数据项是不可分割的最小单位。可以理解为,一个子类的成员变量。如下述眼睛,姓名,性别等为数据项
class Cat extends Animal{
eyes;
name;
sex;
...
}
- 数据对象(通常简称数据)
具有相同数量和类型的数据项的数据元素的集合,是数据的子集
- 数据结构
相互之间存在一种或多种特定关系的数据元素的集合。
数据结构分为逻辑结构和物理结构
- 逻辑结构:数据对象中数据元素之间的关系
- 集合结构:数据元素共处同一集合但两两无关
- 线性结构:一对一
- 树形结构:一对多
- 图形结构:多对多
- 物理结构(存储结构):数据的逻辑结构在计算机中的存储形式
- 顺序存储结构:数据元素地址连续,联系数组考虑
- 链式存储结构:数据存放的存储单元不一定连续,存储关系和逻辑关系无关。但需要一个指针存放下一个数据元素的地址,以此相关联
第二章:算法
- 算法的特性
- 输入输出:>=0个输入,>=1个输出
- 有穷性
- 确定性:每一步不会出现二义性
- 可行性
- 算法的设计要求
- 正确性
- 可读性
- 健壮性:数据不合法时能做出相关处理
- 时间效率高,存储量低
- 效率度量方法
- 事后统计法
- 事前分析估算法(推荐)
- 时间复杂度(一般指最坏时间)
- 记为:O(n)
- 推导大O阶:用1取代加法常数;保留最高阶;最高阶项不是1,就去除常数系数
- O(1):常数阶;O(n):线性阶;O(n2):平方阶;O(logn):对数阶;O(2n):指数阶
- O(1)<O(logn)<O(n)<O(nlongn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
- tips:O(logn):程序影响了循环次数。如下,即为多少个2相乘后>n,2x=n
int count=1;
while(count<n){
count=count*2;
}