难点:时间复杂度
线性表:
1.定义:具有相同特性的数据元素的一个有限序列
元素个数称为线性表的长度
线性表可以为空
2.逻辑特性
表头元素只有后继,表尾元素只有前驱,其他元素只有一个直接前驱和一个直接后继
3.存储结构
顺序存储结构——顺序表
链式存储结构——链表
顺序表 | 链表 | 静态链表 | ||
空间 | 1.存储分配 | 静态分配 占用连续的存储空间, 一次性分配 | 动态分配 结点地址可以连续可以不连续 多次分配 | 用数组表示 需要分配较大连续空间 |
2.存储密度 | 存储密度大(=1) 需要预先分配存储空间 分配太大,空间浪费 分配太小,发生溢出 | 存储密度小(<1) | ||
时间 | 1.存取方式 | 随机存取和访问指定序号元素, O(1) | 顺序存取 | |
2.插入删除 | 不便于元素的插入和删除 平均需要移动将近一半元素 在表尾进行操作不需要移动元素 时间复杂度O(n ) | 方便插入,删除 无须移动元素,只需要 修改相关指针即可 | 方便插入,删除 | |
适用情况 | 适用于一对一的线性逻辑结构 不适用与树或者图这类一对多或者多对多的逻辑结构 多数情况下,顺序存储结构不方便 | 反映数据元素之间的逻辑关系 | 指针指示 链表中下一元素 在数组中地址 | |
双链表:快速访问任何一个结点的前后结点
数据类型:一组性质相同的数值的集合以及定义在此集合上的一些操作的总称。
例如编程语言的整型,浮点型,字符型就是数据类型。
数据类型分类
原子类型:不可以再分解的基本类型,例如整型,浮点型
结构类型:由若干类型组合而成,可以再分解,
例如整型数组是由若干整型数据组成的。
抽象:抽取出事物具有的普遍性的本质
抽象数据类型:一个数学模型以及定义在该模型上的一组操作。
其定义取决于它的一组逻辑特性,与其如何实现无关
抽象数据类型的标准格式,如图所示