1、线性表
1、1 线性表的定义
1、2 线性表的基本操作
1、3 小结
2、线性表的存储结构
2、1顺序表
2、2 顺序表实现-静态分配
案列
2、3 顺序表实现-动态分配
案例
2、4 顺序表的特点
2、5 小结
3、顺序表的插入和删除
3、1顺序表的基本操作-插入
先移位再插入
实现
不健壮的
注意问题:
1. 如果使用者在调用 ListInsert 函数时 内存满了
2.如果使用者在调用 ListInsert 函数时 插入的是不相邻的数时
优化代码加上条件判断
3、2顺序表的插入操作的时间复杂度
问题规模一般是变量大小
3、3顺序表的基本操作-删除
先删除再移位
实现
3、4顺序表的删除操作的时间复杂度
3、5 小结
4、顺序表的查找
4、1顺序表的按位查找
数据地址=起始地址 + 数据类型的大小
4、2顺序表的按位查找时间复杂度
4、3顺序表的按值查找
实现
4、4顺序表的按值查找时间复杂度
4、5小结
5、 链表存储结构
5、1 单链表
5、2 用代码实现一个单链表
实现
不带头结点
带头结点
不带头结点 VS 带头结点
5、3 小结
5、4 单链表的插入删除
按位序插入(带头结点)
实现
时间复杂度
按位序插入(不带头结点)
实现
指定节点的后插操作
实现
指定节点的前插操作
- 传入头指针
- 改变数据
按位序删除(带头结点)
实现
指定节点的删除
5、5小结
5、6单链表的查找
按位查找
各种情况
按值查找
求表的长度
5、7小结
5、8单链表的建立
尾插法建立单链表
- 定义一个length变量记录表长
- 定义一个指针指向末尾元素
案例
头插法建立单链表
案例
5、8小结
5、9 双链表
单链表VS双链表
双链表的初始化(带头结点)
双链表的插入
不健壮
优化
双链表的删除
双链表的遍历
5、10 小结
5、11循环链表
循序单链表
实现
循环双链表
实现
双链表的插入
双链表的删除
5、12小结
5、13静态链表
用代码实现一个静态链表
静态链表的基本操作
5、14
总结
逻辑结构:
顺序表和链表都是线性表,都是线性结构
存储结构
顺序表(顺序存储)
优点:支持随机存取、存储密度高
缺点:大片连续空间分配不方便,改变容量不方便
链表(链式存储)
优点:离散的小空间分配方便,改变容量方便
缺点:不可随机存取,存储密度低
基本操作(运算)
用顺序表or链表