栈和队列
栈
只允许在一端进行插入和删除操作的线性表 LIFO
考有什么合法的出栈顺序
顺序实现
用静态数组实现,记录栈顶指针,声明栈时即分配空间
空栈时置top为-1/0,栈的大小不可变
共享栈,666还能这么写
链式实现
带头结点/不带头结点 出栈和进栈都只能在栈顶(链头)一端进行
队列
只允许在一端插入,另一端删除的线性表 FIFO
(rear+1) %n= front时队列满,rear=front时为空(循环队列)
1、牺牲一个空位来记录是否为满 2、牺牲一些内存创建变量来记录长度/记录是否为满
链式实现
注意第一个元素入队和最后一个元素出队的特殊处理
双端队列
允许两端插入/删除的线性表
可以扩展输入受限、输出受限
应用
栈
·验证括号表达式是否正确
·进行前缀/中缀/后缀表达式的的换算 注意中缀表达式计算时,使用运算符和操作数栈同时进行中缀转后缀和后缀换算
·在递归中的应用
队列
·树的层次遍历
·图的广度优先遍历
·操作系统中的应用(FCFS)
矩阵
一维数组 各数组元素大小相同,物理上连续存放
二维数组 行优先/列优先存储
应用在矩阵的压缩存储上
对称矩阵 注意如何转化下标就行
三角矩阵
带状矩阵
稀疏矩阵
压缩三元组<行、列、值>来存储
十字链表 感觉很浪费