一、应用一:栈在括号中的应用
1.1 问题描述
一般的写一个算数表达式,看看括号是否是匹配的。
1.2 算法思路
- 初始设置一个空栈,顺序读入括号
- 若是左括号压入栈中。
- 若是右括号,看是否与栈顶的左括号匹配,
- 若匹配,则弹出栈顶左括号
- 若不匹配,则算法结束。
1.3 手算
二、应用二:栈在表达式中的应用
2.1 问题描述
计算机中常常会把一个表达式转换为前缀表达式或者后缀表达式,便于利用栈进行计算
2.2 前中后缀表达式
- 中缀表达式:a + b,运算符在数字之间,也就是普通的我们经常写的表达式。
- 后缀表达式:a b +,运算符在数字之后,根据中缀表达式进行变换而来
- 前缀表达式:+ a b,运算符在数字之前,根据中缀表达式进行变换而来
2.3 考法一:前中后缀表达式之间转换(重点)
- 通常考试会给一个中缀表达式,写出它的前缀表达式或者后缀表达式。
- 中缀表达式转后缀表达式原则:数字集合在左优先,也称左优先原则。
- 中缀表达式转前缀表达式原则:数字集合在右优先,也称右优先原则。
2.4 考法二:后缀表达式如何计算
- 通常考试会给一个后缀表达式,写出其计算结果
- 计算步骤
- ①从左到右遍历表达式
- ②扫描到数字压入栈中
- ③扫描到操作符弹出栈顶两个元素Y和X
- ④将弹出的两个数和操作符进行计算 ,XY(一定要注意最上面的是Y其次到X)
- ⑤将计算结果压入栈中,继续扫描。
2.5 代码
应用三:栈在递归中的应用
-
类似于俄罗斯套娃,一层接着一层循环。但有两个条件,需要递归表达式(递归体)和边界条件(递归出口)。
-
典型的就是斐波那契数列,还有树的遍历都会涉及到。读的懂就可以。不懂可以再看看视频。初次理解肯定有点难。
-
斐波那契数列
在这里插入代码片
应用四:队列在层序遍历中的应用
4.1 问题描述
二叉树的遍历有前序遍历,中序遍历,后序遍历,层序遍历。其中层序遍历中就需要用到队列。
4.2 算法步骤
- ① 根节点入队
- ② 若队空(所有结点都已处理完毕),则遍历结束;否则执行步骤③
- ③ 队列中第一个结点出队,并访问之。若有左孩子,左孩子入队;若有右孩子,则将右孩子入队,返回②。