【数据结构】计算后缀表达式的值

如何实现栈

如何利用栈将中缀表达式转换为后缀表达式

题目

我们平常使用的计算表达式都是中缀表达式,而输入计算机后会转换为后缀表达式,即计算机只能计算后缀表达式,那么如何计算机是如何计算后缀表达式的值的呢?

算法

1)从左到右扫描后缀表达式字符串
2)初始化一个空栈
3)如果扫描到数字,那么就直接入栈
4)如果被扫描的字符是一个二元运算符,那么就连续出栈两次,获得两个字符,元素出栈后,应用运算符进行计算,并将结果压栈
5)重复3)和4)的操作,直至扫描完字符串
6)扫描完所有字符串之后,栈中只剩一个元素,该元素就是最终结果,将其出栈并返回。

Java版本实现

	
	//计算后缀表达式算法
    static Double calculator(String curString) {
   
        LLStack<Double> stack = new LLStack<>();
        for(int i = 0; i < curString.length(); i++) {
   
            String t = curString.substring(i , i + 1 );
            if(t.charAt(0) >= '0' && t.charAt(0) <= '9' ) {
   
                //数字直接入栈
                stack.push(Double.parseDouble(t));
            }else {
   
                double a , b = 0;
                a =(Double) stack.pop();
                b =(Double) stack.pop();
                switch(t){
   
                    case "*" : stack.push(b * a);System.out.println(t+":" + b * a);break;
                    case "/" : stack.push(b / a);System.out.println(t+":" + b / a);break;
                    case "+" : stack.push(b + a);System.out.println(t+":" + (double)(b + a));break;
                    case "-" : stack.push(b - a);break;
                    case "%" : stack.push(b % a);break;
                }
            }
        }
        return stack.pop() ;
    }
栈的实现
class LLNode<T>{
   
    private T data;
    private LLNode next = null;

    public LLNode(T d){
   
        data = d;
    }
    public T getData() {
   
        return data;
    }
    public void setData(T data) {
   
        this.data = data;
    }
    public LLNode getNext() {
   
        return next;
    }
    public void setNext(LLNode next) {
   
        this.next = next;
    }


}
public class LLStack<T> {
   
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值