数据结构
基本概念
- 数据:
- 数据项:构成数据元素的不可分割的最小单位
- 数据元素:数据的基本单位,常作为整体进行考虑使用
- 数据结构:相互之间存在特定关系的数据元素怒的集合
- 数据对象:具有相同性质的数据元素的集合
数据结构的三要素
-
逻辑结构:集合,线性,树形,图
-
数据的存储结构(物理结构):顺序,链式,索引,散列(哈希存储)
数据的存储结构会影响存储空间的分配方便程度,运算速度
-
数据的运算:包括运算的定义和实现。运算的定义是指针对逻辑结构的,指出运算的功能。运算的实现是针对储存结构的,指出运算的具体操作步骤。
数据类型,抽象数据类型
数据类型:一个值的集合和定义在此集合上的一组操作
- 原子类型,其值不可再分得数据类型
- 结构类型:其值可以再分解为若干成分的数据类型
抽象数据类型(ADT):抽象数据组织及与之相关的操作
用数学化的语言定义逻辑结构,运算,与具体的实现无关
算法
程序=数据结构+算法
- 数据结构将问题信息化,并将信息存入计算机,同时实现对数据结构的基本操作
- 算法则是如何处理这些信息,以解决实际问题
算法的五个特性
- 有穷性:算法需要有穷步后结束,程序可以是无穷的
- 确定性
- 可行性
- 输入:有0个或多个输入
- 输出:有一个或多个输出
一个好算法追求的目标
- 正确性
- 可读性:可以用伪代码,文字描述
- 健壮性:对于非法数据,可以有反应
- 高效率及低存储量需求:时间复杂度,空间复杂度
算法的效率度量
**算法时间复杂度:**事前估计算法时间开销T(n)与问题规模n的关系
void LoveYou(int n){
int i=1;
while(n<=n){
i++;
printf("I Love You\n");
}
printf("I Love You More Than %d \n",n);
}
T(n)=3n+n
大O表示法
- 加法规则:多项相加只保留最高阶的项,且系数变为1
- 乘法规则:多项想乘,都保留
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n²)<O(n³)<O(2的n次方)<O(n!)<O(n的n次方)
口诀: 常对幂指阶
计算方法
- 顺序执行的代码只影响常数项,可以忽略
- 只需挑循环中的一个基本 操作,分析他与n的关系即可
- 对于多层嵌套的循环只需考虑其最深层的循环的执行次数与n的关系
空间复杂度S(n)
程序执行时的内存需求
- 程序代码
- 数据
- 函数递归调用带来的内存开销(函数调用栈)—》递归调用深度