中缀,后缀表达式

后缀表达式的计算

算法描述:

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.对于( 压入栈中,遇到)将栈中元素输出,直到遇到(.

 

posted @ 2016-05-21 16:23  bounce  阅读(330)  评论(0编辑  收藏  举报