什么是数据结构:
数据对象在计算机中的组织方式(逻辑结构,物理存储结构)
数据对象必定与一系列加在其上的操作相关联
完成这些操作所用的方法就是算法
抽象数据类型
数据类型:
- 数据对象集
- 数据集合相关联的操作表
抽象:
描述数据类型的方法不依赖于具体实现
- 与存放数据的机器无关
- 与数据存储的物理结构无关
- 与实现操作的算法和编程语言均无关
只描述数据对象集和相关操作集“是什么”,并不涉及“如何做到的问题”
算法
算法:(感觉就是思路和具体解法)
- 一个有限指令集
- 接受一些输出(有些情况下不需要)
- 产生输出
- 一定在有限步骤后终值(有穷性)
- 每一条指令必须:
- 有充分明确的目标,不可以有歧义
- 计算机能处理的范围之内
- 描述应该不依赖于任何一种计算机语言以及具体的实现手段
时间复杂度T(n):耗费时间的长度 空间复杂度S(n):占用存储单元的长度
复杂度分析小技巧:
- 若两段算法分别有复杂度T1(n)=O(f1(n)) 和 T2(n)=O(f2(n)),则:
- 相加 = max(O(f1(n)),O(f2(n))
- 相乘 = O(f1(n) * f2(n))
2.一个for循环的时间复杂度等于循环次数乘以循环体代码的复杂度
3.if-else 结构的复杂度取决于if 的条件判断复杂度和两个分歧部分的复杂度,总体复杂度取三者中最大
有一个算法题,给出时间复杂度最小的算法
时间复杂度:N**3 > N**2 > NlogN > N
线性表及顺序存储
线性表:由同类型数据元素构成有序序列的线性结构
- 表中元素个数称为线性表的长度
- 线性表没有元素时,称为空表
- 表起始位置称表头,表结束位置称表尾
链式存储及查找
不要求逻辑上相邻的两个元素物理上也相邻;通过“链”建立起数据元素之间的逻辑关系
插入,删除不需要移动数据元素,只需要修改“链”
具体的操作实现都看书 吧