考虑的问题:
- 为什么要引入这种数据结构?
- 逻辑结构?
- 存储结构?
- 时间复杂度?
- 空间复杂度?
应用
- 指代的就是这种数据结构产生的背景
逻辑结构
- 算法设计取决于逻辑结构
- 按照逻辑结构进行划分,常见的数结构可以分为 线性结构 和 非线性结构
- 线性结构 如线性表
- 非线性结构如 集合(数据集合)、树(一对多)、图(多对多)
- 另外说明:树是一种特殊的图
存储结构
- 算法的实现依赖于所采用的存储结构
- 常见的存储结构有
- 顺序存储: 优点:随机存取; 缺点:产生碎片,不易扩容
- 链式存储: 优点:充分利用存储单元; 缺点:存储指针消耗额外存储空间
- 索引存储: 优点:检索速度极快; 缺点:消耗存储空间存储索引表
- 散列存储: 优点:检索、增减数据速度快; 缺点:散列函数可能存在冲突,解决冲突将消耗额外的时间和空间。
时间复杂度
- 理论:
- T(n): 算法中所有语句的频度之和,为算法规模 n 的一个函数
- O(n): 为了减少无关紧要的语句对算法时间复杂度的分析,取程序最深层循环内的语句作为时间复杂度分析,根据极限理论,当 n -> 正无穷时,和 T(n) 同一个数量级;
空间复杂度
- 在存储空间白菜价格的年代,请忽略空间复杂度。