引言
数据结构
基本定义
数据:信息的载体,用于描述客观事物属性并能输入到计算机中被计算机程序识别和处理的符号的集合
数据元素:数据的基本单位,由多个数据项构成,数据项是不可分割最小单位
数据对象:具有相同性质的数据元素的集合,数据的子集
数据结构:相互之间存在一种或多种特定关系的数据元素的集合 同一个数据对象的数据元素可以组成不同的数据结构 不同的数据元素也能组成相同的数据结构
三要素
强调的是数据元素之间的关系和操作,而不是内容 定义(逻辑)+实现(物理/存储)
逻辑关系
集合:无关系 线性结构:一对一关系,唯一前驱和唯一后继(头尾结点特殊) 树形结构:一对多关系 图结构:多对多关系
数据的运算
基于逻辑结构和实际需求的基本运算CRUD
物理结构 如何用计算机表现逻辑关系(顺序+非顺序)
顺序存储:物理上相邻 链式存储:借助指示存储地址的指针搭建逻辑关系 索引存储:构建索引表实现逻辑关系(关键字、地址) 散列存储:根据元素关键字计算出元素存储地址,Hash
影响分配方便程度和运算速度
数据类型 值的集合和定义在此集合上的一组操作的总称
原子类型:值不可再分,int bool 结构类型:值可以再分解为若干分量的数据类型,struct
抽象数据类型ADT 抽象数据组织和与之相关的操作
算法
对特定问题求解步骤的一种描述,是指令的有限序列,每个指令表示一个或多个操作
有穷性:在执行有穷步之后结束,每一步在有穷时间内完成(对比程序无穷) 确定性:每条指令有确定的含义,相同输入对应相同输出 可行性:算法中操作可以通过已经实现的基本运算执行有限次来实现 输入-输出:0-n -> 1-n
正确性:正确处理问题 可读性:能读,能理解 健壮性:输入非法数据时适当做出反应和处理,而不是莫名输出 高效率地存储:时间复杂度和空间复杂度
时间复杂度
预估算法时间开销T(基本操作的执行次数x)和问题规模n之间的关系
只考虑高阶部分,O表示同阶(同等数量级) 加法规则T(n) = T1(n) + T2(n) = O(f(n)) + O(g(n)) = O(max(f(n), g(n))) 乘法规则T(n) = T1(n) × T2(n) = O(f(n)) × O(g(n)) = O(f(n)×g(n))
一般只考虑最坏和平均时间复杂度
空间复杂度
注意:算法原地工作--算法所需内存空间为常量