• 课下选作Main dc


    一.中后缀定义:
    中缀表达式:我们平时写的数学表达式一般为中缀表达式,如“5+2(3(3-12+1))”,直接拿中缀表达式直接让计算机计算表达式的结果并不能做到。
    后缀表达式:把中缀表达表达式“5+2
    (3(3-12+1))”转化“523312-1+**+”这样的形式,就是后缀表达式。
    二.原理
    堆栈的使用
    三.代码以及运行截图
    import java.util.Stack;
    /
    j计算后缀表达式
    20175131王泽龙
    /
    public class Main {
    static Stack op = new Stack<>();
    public static Float getv(char op, Float f1, Float f2){
    if(op == '+') return f2 + f1;
    else if(op == '-') return f2 - f1;
    else if(op == '
    ') return f2 * f1;
    else if(op == '/') return f2 / f1;
    else return Float.valueOf(-0); }
    /**
    * calculate the value of the reverse Polish expression
    * @param rp - reverse Polish expression
    * @return - result of the expression
    /
    public static float calrp(String rp){
    Stack v = new Stack<>();
    char[] arr = rp.toCharArray();
    int len = arr.length;
    for(int i = 0; i < len; i++){
    Character ch = arr[i];
    // if is operand, push to the stack
    if(ch >= '0' && ch <= '9') v.push(Float.valueOf(ch - '0'));
    // if is operator, calculate the result
    // with top 2 operands in the stack,
    // push the result into the stack
    else v.push(getv(ch, v.pop(), v.pop()));
    }
    return v.pop();
    }
    /
    *
    * from infix to postfix
    * @param s - String in the form of infix
    * @return String in the form of postfix
    /
    public static String getrp(String s){
    char[] arr = s.toCharArray();
    int len = arr.length;
    String out = "";
    for(int i = 0; i < len; i++){
    char ch = arr[i];
    if(ch == ' ') continue;
    // if is operand, add to
    // the output stream directly
    if(ch >= '0' && ch <= '9') {
    out+=ch;
    continue;
    }
    //if is '(', push to the stack directly
    if(ch == '(') op.push(ch);
    //if is '+' or '-', pop the operator
    // from the stack until '(' and add to
    // the output stream
    //push the operator to the stack
    if(ch == '+' || ch == '-'){
    while(!op.empty() && (op.peek() != '('))
    out+=op.pop();
    op.push(ch);
    continue;
    }
    //if is '
    ' or '/', pop the operator stack and
    // add to the output stream
    // until lower priority or '('
    //push the operator to the stack
    if(ch == '' || ch == '/'){
    while(!op.empty() && (op.peek() == '
    ' || op.peek() == '/'))
    out+=op.pop();
    op.push(ch);
    continue;
    }
    //if is ')' pop the operator stack and
    // add to the output stream until '(',
    // pop '('
    if(ch == ')'){
    while(!op.empty() && op.peek() != '(')
    out += op.pop();
    op.pop();
    continue;
    }
    }
    while(!op.empty()) out += op.pop();
    return out;
    }
    public static void main(String[] args){
    //constraint: the operand should be
    // equal or greater than 0
    // but equal or less than 9
    String exp = "5+5(3(2-1))";
    System.out.println(calrp(getrp(exp)));
    }
    }
    我做的比较简单,计算的表达式固定:5+5(3(2-1))

    四.码云链接
    https://gitee.com/WZL-DM/BESTI.java.is.20175131

  • 相关阅读:
    开源框架---tensorflow c++ API 一个卡了很久的问题
    开源框架---tensorflow c++ API 运行第一个“手写字的例子”
    版本问题---Bazel与tensorflow的对应关系
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
  • 原文地址:https://www.cnblogs.com/WZL-DM/p/10851442.html
Copyright © 2020-2023  润新知