Java 栈的应用场景

栈的特点就是先进后出,后进先出,分别用push和pop表示进栈和出栈操作。那么栈的应用场景有很多,比如:

  1. 子程序的调用:在跳往子程序前,会将下个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以回到原来的程序中。
  2. 处理递归调用:和子程序的调用类似,只是出了存储下一个指令的地址外,也将参数、区域变量等数据存入堆栈中。
  3. 逆序输出。
  4. 表达式的转换[中缀表达式转后缀表达式]与求值
  5. 二叉树的遍历。
  6. 图的深度优先(depth-first)搜索法。
  7. 数制转换:通过求余法,每次将余数进栈,最后将所有余数出栈即可。
  8. 括号匹配校验
  9. 迷宫求解
  10. 实现递归-汉诺塔
  11. 等等

使用栈完成简单表达式的计算思路:

  1. 使用一个数栈存放数,使用一个符号栈存放操作运算符
  2. 通过一个index值(索引),来遍历我们的表达式
  3. 如果我们发现是一个数字,就直接入数栈
  4. 如果我们发现是一个符号,则分以下情况:
    4.1 如果当前符号栈为空,就直接入栈
    4.2 如果当前符号栈部位空,就进行比较。如果当前操作符的优先级小于或者等于栈中的操作符,就需要从数栈中pop出两个数,从符号栈中pop出一个符号,进行运算,将运算结果入数栈,经当前的操作符入符号栈。如果当前操作符的优先级大于栈中的操作符,就直接入符号栈。
  5. 当表达式扫描完毕,就顺序的从数栈和符号栈中pop出相应的数和符号,并进行运算。
  6. 最后在数栈中只有一个数字,就是表达式的结果。

你可能感兴趣的:(算法与数据结构,Java,算法与数据结构)