用栈实现了一个求简单表达式值的算法。算法最后是一个同优先级的表达式,需要先入先出,这违背了栈先入后出的性质。最终使用递归解决这个问题,先把一个操作数和一个操作法pop出来,然后递归的pop,直到操作法栈为空,递归结束。
package cn.agan.mystack;
import java.util.Scanner;
/**
* 表达式计算:
* 用栈来计算一个表达式的值 7 * 2 * 2 - 5 +1 + 4 / 2 * 3 = 30
* 两个栈,一个用来压数字,一个压入运算符,如果栈为空就直接将运算符压人栈中;如果要压入的运算符优先级大于栈顶的运算符
* 则弹出两个数字,算完再将结果押入数字栈,栈顶运算符弹出,目的运算符继续与下一个栈顶运算符比较。。。
* 在压完运算符后,依次弹出运算符,每弹出一个运算符,就弹出两个数字进行运算,结果压入数字栈。。。直至运算符弹出完毕。
*/
public class ExpressionCalculate {
public static void main(String[] args) {
ArrayStack2 digitalStack = new ArrayStack2(1024);
ArrayStack2 operatorStack = new ArrayStack2(1024);
boolean loop = true;
Scanner scanner = new Scanner(System.in);
String line;
int index = 0, num1 = 0, num2 = 0, res = 0, oper = 0;