栈的特点就是先进后出,后进先出,分别用push和pop表示进栈和出栈操作。那么栈的应用场景有很多,比如:
- 子程序的调用:在跳往子程序前,会将下个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以回到原来的程序中。
- 处理递归调用:和子程序的调用类似,只是出了存储下一个指令的地址外,也将参数、区域变量等数据存入堆栈中。
- 逆序输出。
- 表达式的转换[中缀表达式转后缀表达式]与求值
- 二叉树的遍历。
- 图的深度优先(depth-first)搜索法。
- 数制转换:通过求余法,每次将余数进栈,最后将所有余数出栈即可。
- 括号匹配校验
- 迷宫求解
- 实现递归-汉诺塔
- 等等
使用栈完成简单表达式的计算思路:
- 使用一个数栈存放数,使用一个符号栈存放操作运算符
- 通过一个index值(索引),来遍历我们的表达式
- 如果我们发现是一个数字,就直接入数栈
- 如果我们发现是一个符号,则分以下情况:
4.1 如果当前符号栈为空,就直接入栈
4.2 如果当前符号栈部位空,就进行比较。如果当前操作符的优先级小于或者等于栈中的操作符,就需要从数栈中pop出两个数,从符号栈中pop出一个符号,进行运算,将运算结果入数栈,经当前的操作符入符号栈。如果当前操作符的优先级大于栈中的操作符,就直接入符号栈。 - 当表达式扫描完毕,就顺序的从数栈和符号栈中pop出相应的数和符号,并进行运算。
- 最后在数栈中只有一个数字,就是表达式的结果。
1503

被折叠的 条评论
为什么被折叠?



