中缀,后缀表达式
Posted bounce
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了中缀,后缀表达式相关的知识,希望对你有一定的参考价值。
后缀表达式的计算
算法描述:
1.遇到两个分量,就压入栈中。
2.遇到运算符就从栈中取出两个分量,计算结果,并将结果压入栈中。
具体实现:
1 private static Stack<Double> stack=new Stack<Double>(); 2 public void calcufix(char expr){ 3 double left=0.0; 4 double right=0.0; 5 if(get2opreate()){ 6 right=stack.pop(); 7 left=stack.pop(); 8 } 9 switch(expr){ 10 case ‘+‘: 11 stack.add(left+right);break; 12 case ‘-‘: 13 stack.add(left-right);break; 14 case ‘*‘: 15 stack.add(left*right);break; 16 case ‘/‘: 17 stack.add((double)left/right);break; 18 case ‘^‘: 19 stack.add(Math.pow(left, right));break; 20 } 21 } 22 23 public Boolean get2opreate(){ 24 Boolean result=false; 25 if(stack.size()>=2){ 26 result=true; 27 } 28 return result; 29 } 30 31 public static void main(String[]args){ 32 postfix fix=new postfix(); 33 Scanner sc=new Scanner(System.in); 34 String line= sc.next(); 35 char [] list=line.toCharArray(); 36 for(int i=0;i<list.length;i++){ 37 if(list[i]==‘+‘||list[i]==‘-‘||list[i]==‘*‘||list[i]==‘/‘||list[i]==‘^‘){ 38 fix.calcufix(list[i]); 39 }else{ 40 // System.out.println((double)(list[i]-‘0‘)); 41 fix.stack.add((double)(list[i]-‘0‘)); 42 } 43 } 44 45 Double answer=stack.pop(); 46 System.out.println(answer); 47 48 }
infix --- ->postfix
算法:
1.遇到分量直接输出。
2.遇到运算符,比较当前运算符和栈顶运算符的优先级,当前<=栈顶就输出,直到不<=。否则压栈
3.考虑到输出,应该在最后加入#运算符。最小优先级的,使表达式能够结束。
4.对于( 压入栈中,遇到)将栈中元素输出,直到遇到(.
以上是关于中缀,后缀表达式的主要内容,如果未能解决你的问题,请参考以下文章