初识后缀表达式

    xiaoxiao2021-12-14  33

    什么是后缀表达式? 说到后缀表达式 我们先说下中缀表达式吧,中缀表达式其实就是我们平常看到的表达式例如:12+(19-48+5/8) 那么后缀表达式呢? 顾名思义 运算符号在后面的表达式:12 19 48 - 5 8 / + +


    也许刚看到这串字符会很懵圏 我们来下慢动作:

    可以看到 中缀表达式转换成后缀表达式时 检索第一个 为数字 在后缀表达式中直接 添加 如果 为 运算符号 则在栈中 添加 如果为( 则在栈中添加 如果为) 则将( 调至栈顶 并弹出栈 如果栈中有2个 或多于两个运算符 则 比较 栈最上方的两个运算符的 优先级 将优先级大的 填到后缀表达式中 并弹出


    后缀表达式的转换呢 大概就是这样 主要运用了栈的知识

    小白我呢 也不知道该怎么运用这些知识点所以 用ArrayList 来存储 模拟栈

    不是全部的代码=。= 写的有些乱

    private ArrayList Conversion(ArrayList arrayList) { //mSuffix 结果 mSuffix = new ArrayList(); //运算符 mOperation = new ArrayList(); j = 0; for (int i = 0; i < arrayList.size(); i++) { if (arrayList.get(i) == "+" || arrayList.get(i) == "-") { mOperation.add((String) arrayList.get(i)); getFirst(); } else if (arrayList.get(i) == "*" || arrayList.get(i) == "/") { mOperation.add((String) arrayList.get(i)); getFirst(); } else if (arrayList.get(i) == "(") { mOperation.add((String) arrayList.get(i)); j =1; } else if (arrayList.get(i) == ")") { j =0; if (mOperation.size()>=1&&mOperation.get(mOperation.size()-1) == "("){ mOperation.remove(mOperation.size()-1); } if (mOperation.size() >= 2) { if (mOperation.get(mOperation.size() - 2) == "(") { mSuffix.add(mOperation.get(mOperation.size() - 1)); mOperation.remove(mOperation.size() - 1); mOperation.remove(mOperation.size() - 1); } else { getFirst(); if (mOperation.get(mOperation.size() - 2) == "(") { mSuffix.add(mOperation.get(mOperation.size() - 1)); mOperation.remove(mOperation.size() - 1); mOperation.remove(mOperation.size() - 1); } } } } else { mSuffix.add((String) arrayList.get(i)); } if (i == arrayList.size() - 1) { if (mOperation.size()>0){ getLast(); } } } return mSuffix; }

    嗯 中缀转换成了后缀表达式以后呢 反正不能看着吧 在看下如何计算的 其实计算就比较容易了 简单的说也就一句话“检索到运算符的时候计算运算符前的2个数” 举个栗子:12 19 48 - 5 8 / + + 一个数一个数的读取 如下图

    代码呢 如下:

    public String Calculation(ArrayList<String> arrayList) { String jieguo; for (int i = 0; i <arrayList.size(); i++) { if (arrayList.get(i) == "+") { jieguo = MyMath.add(arrayList.get(i - 2), arrayList.get(i - 1)); arrayList.remove(i); arrayList.remove(i - 1); arrayList.remove(i - 2); i = i - 2; arrayList.add(i, jieguo); // Calculation(changeString(result),changeString(result).size()); } else if (arrayList.get(i) == "-") { jieguo = MyMath.subtract(arrayList.get(i - 2), arrayList.get(i - 1)); arrayList.remove(i); arrayList.remove(i - 1); arrayList.remove(i - 2); i = i - 2; arrayList.add(i, jieguo); // Calculation(changeString(result),changeString(result).size()); } else if (arrayList.get(i)== "*") { jieguo = MyMath.multiply(arrayList.get(i - 2), arrayList.get(i - 1)); arrayList.remove(i); arrayList.remove(i - 1); arrayList.remove(i - 2); i = i - 2; arrayList.add(i, jieguo); // Calculation(changeString(result),changeString(result).size()); } else if (arrayList.get(i) == "/") { if (arrayList.get(i - 1).equals("0")) { return "除零了"; } else { jieguo = MyMath.divide(arrayList.get(i - 2), arrayList.get(i - 1)); arrayList.remove(i); arrayList.remove(i - 1); arrayList.remove(i - 2); i = i - 2; arrayList.add(i, jieguo); } } } return arrayList.get(0); }

    唔 算是第一次写博客吧·· 哈哈这里小白 从零开始系列

    转载请注明原文地址: https://ju.6miu.com/read-964670.html

    最新回复(0)