目录
- 第一章 绪论
- 第二章 线性表
- 1-线性表的顺序表示(顺序表)
- 2-线性表的链式表示(链表)
- (1)单链表
- (2)循环链表
- (3)双向链表
- 3-顺序表和链表的比较
- 4-线性表的应用
- 第三章 栈和队列
- 1-栈
- 顺序栈
- 链栈
- 栈的应用
- 2-队列
- 循环队列
- 链队
- 双端队列
- 栈和队列的对比
- 第四章 串
- 1-定长顺序存储表示
- 2-堆分配存储表示
- 3-串的块链存储表示
- 4-串的模式匹配算法
- 串的应用
第一章 绪论
1-逻辑结构
2-存储(物理)结构
顺序
链式
索引存储:建立附加的索引表来标识结点的地址
散列存储:根据结点的关键字通过散列函数计算节点的地址
3-抽象数据类型
4-算法的五个特性
第二章 线性表
1-线性表的顺序表示(顺序表)
顺序表的插入
时间复杂度分析:
2-线性表的链式表示(链表)
重要特性:失去了顺序表随机存取的特性
链表分类:(1)实现线性表的链式存储结构–单链表、循环链表、双向链表。(2)实现非线性结构:二叉链表、十字链表、邻接表、邻接多重表
(1)单链表
头指针: 指向链表的第一个结点(首元结点)
头节点: 首元节点前的一个结点。
为什么对单链表设置头节点:(1)保证每一个结点都有前驱节点,使得插入删除结点的处理统一。(2)在表空时存在头节点,使得空表和非空表的处理统一。(3)可以在头结点中存放一些信息,比如结点的个数。
取值 :时间复杂度:o(n)
因为需要从首元结点出发,顺着链域next逐个结点向下访问
插入和删除: 时间复杂度均为o(n)
单链表和顺序存储结构的区别
创建单链表的两种方法:
尾插法需要增加一个尾指针r指向链表的尾结点
两个有序链表并为一个有序链表:
静态链表:
使用数组实现,数组的一个分量代表一个结点,在用一个游标代替指针 指示 结点在数组中的相对位置。
(2)循环链表
设置尾指针:
(3)双向链表
3-顺序表和链表的比较
4-线性表的应用
(1)线性表的合并
(2)有序表的合并
第三章 栈和队列
1-栈
仅在表尾(栈顶)操作
顺序栈
链栈
栈的应用
(1)数制转换
(2)括号匹配的检验
(3)表达式求值
(4)递归需要栈(后调用先返回)
(5)利用栈将递归转换为非递归
2-队列
队头删除,队尾插入
循环队列
队列循环队列队空、队满
求队列长度:
链队
双端队列
应用: 操作系统中用来解决主机和外设之间速度不匹配问题和多个用户引起的资源竞争问题(例如共享打印机)
栈和队列的对比
第四章 串
包括定长顺序存储、堆分配存储、块链存储
1-定长顺序存储表示
2-堆分配存储表示
3-串的块链存储表示
4-串的模式匹配算法
两种算法:BF算法和KMP算法
BF
KMP算法
求解next数组
改进的KMP算法: 计算nextval数组
串的应用
(1)文本编辑
(2)建立词索引表-信息检索