栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
1、子程序的调用
在调往子程序前,会先将下个指令的地址存放到堆栈中,直到子程序执行完后再将地址抛出,以回到原来的程序。
2、处理递归调用
和子程序的调用类似,除了村下个指令的地址外,还要存放参数,区域变量等数据。
3、表达式的转换
中缀表达式转后缀表达式
4、二叉树的遍历
5、图形的深度优先搜索法
1、思路分析
- 通过一个index值(索引),来遍历我们的表达式
- 如果发现是一个数字直接入数栈
- 如果发现当前的符号栈是空,就直接入栈
- 如果发现符号栈有操作符,就进行比较,如果当前的操作符的优先级小于或等于栈中的操作符,就需要从数栈中pop出一个符号,进行运算,将得到结果,入数栈,然后将当前的操作符入符号栈,如果当前的操作符的优先级大于栈中的操作符,就直接入符号栈。
- 当表达式扫描完毕,就顺序的从数栈和符号栈中pop出相应的数和符号,并进行运算。
- 最后在数栈中只有一个数字,就是表达式的结果。
2、代码实例
(1)ArrayStack工具类
(2)测试类
3、控制台输出