输出合法性
关键:一个结点出栈后,比它之前入栈的结点而且在它之后出栈的,出栈顺序和入栈顺序相反
栈的存储
链式存储,一般采用带头结点的头插法
顺序存储,需要注意栈顶指针的两种方式
队列的存储结构
需要有两个指针,指向队头和队尾
顺序存储:为了防止假溢出,需要每次入队出队进行Mod操作
为了区分是队空还是队满,1,设置size变量,每次入队出队都需要进行修改;2,牺牲一个空间不进行存储,如果队尾指针的下一个是队头则说明队满
队列的实际应用
- 缓冲区
- 对树的层序遍历
栈的实际应用
函数调用压栈信息
表达式求值问题
中缀转后缀执行左优先的原则,如果有相同级别的算法,优先执行左边部分
手算方法:从前往后扫描到第一个操作符,然后运算前面两个数等到新的数据,然后再不断执行之前的步骤
注意左右操作数的顺序是规定的不能乱改
先弹出栈顶元素的是右操作数
中缀转前缀需要执行右优先的原则
具体步骤
- 因为中缀还是后缀,操作数的相对位置都是不变的
- 如果遇到操作数直接输出
- 如果遇到运算符,如果栈空,则入栈;如果栈非空,需要出栈那些比它优先级还高或者相等的操作数
- 如果遇到(需要遇到右括号才能出栈操作
实现前缀表达式的流程
- 从右往左扫描每一个元素,如果是符号则弹栈操作,先出栈的是左操作数
- 如果是操作数则入栈
后缀表达式先出栈的是右操作数
特殊矩阵的压缩存储
对称矩阵:
三角矩阵:需要多一个数组量来存放常量
稀疏矩阵:三元组
十字链表法