美文网首页
利用栈将中缀转为后缀

利用栈将中缀转为后缀

作者: 小蜗牛Snail丶 | 来源:发表于2019-11-02 19:26 被阅读0次

大概算法思路如下:

1)如果遇到操作数,我们就直接将其输出。
2)如果遇到操作符,则我们将其放入到栈中,遇到左括号时我们也将其放入栈中。
3)如果遇到一个右括号,则将栈元素弹出,将弹出的操作符输出直到遇到左括号为止。注意,左括号只弹出并不输出。
4)如果遇到任何其他的操作符,如(“+”, “*”,“(”)等,从栈中弹出元素直到遇到发现更低优先级的元素(或者栈为空)为止。弹出完这些元素后,才将遇到的操作符压入到栈中。有一点需要注意,只有在遇到" ) "的情况下我们才弹出" ( ",其他情况我们都不会弹出" ( "。
5)如果我们读到了输入的末尾,则将栈中所有元素依次弹出。

简易算法如下:

import java.util.Scanner;
import java.util.Stack;

public class MidToAfter {

public void inFixtoAfter() {

    Stack<Character> s = new Stack<Character>();
    String expression = "a+b*c+(d*e+f)*g=";
    Character token;
    int i = 0;

// Scanner sc = new Scanner(System.in);
// expression = sc.next();

    while ((token = expression.charAt(i++)) != '=') {
        if (token >= 'a' && token <= 'z') {
            System.out.print(token + " ");
        } else {
            switch (token) {
                case ')':
                    while (!s.empty() && s.peek() != '(') {
                        System.out.print(s.pop() + " ");
                    }
                    s.pop();
                    break;
                case '(':
                    s.push(token);
                    break;
                case '*':
                case '/':
                    while (!s.empty() && s.peek() != '+'
                            && s.peek() != '-' && s.peek() != '(') {
                        System.out.print(s.pop() + " ");
                    }
                    s.push(token);
                    break;
                case '+':
                case '-':
                    while (!s.empty() && s.peek() != '(') {
                        System.out.print(s.pop() + " ");
                    }
                    s.push(token);
                    break;
            }
        }
    }

    while (!s.empty()) {
        System.out.print(s.pop() + " ");
    }
    System.out.println();

}

public static void main(String[] args) {
    new MidToAfter().inFixtoAfter();

}

}

相关文章

  • 利用栈将中缀转为后缀

    大概算法思路如下: 1)如果遇到操作数,我们就直接将其输出。2)如果遇到操作符,则我们将其放入到栈中,遇到左括号时...

  • 利用栈将中缀表达式转为后缀表达式

    利用栈将中缀表达式转为后缀表达式 算法思想 顺序扫描中缀表达式(可以存储在字符数组中) 判断当前元素类型:如果是数...

  • 四则运算表达式求值

    利用栈求解四则运算:求解思路为先将中缀表达式转换为后缀表达式,再利用后缀表达式求解中缀表达式:运算符出现在两个数字...

  • 计算器

    使用Java写的一个可以计算+,-,*,/ 的计算器。首先用栈把中缀表达式转化成后缀表达式,再利用栈对后缀表达式求...

  • 一些算法题

    1.四则运算表达式求值: 两个栈存储,中缀表达式转为后缀表达式 okcalculate1 & calculate2...

  • 中缀转后缀字符串表达式求值

    概念 前缀表达式(波兰表达式)运算符位于操作数前,右到左依次入栈 中缀表达式从左到右依次入栈,一般转为后缀表达式 ...

  • 机试常用算法和题型-栈和队列专题

    堆栈+ordermap使用括号匹配 堆栈使用简单计算器 栈+队列实现中缀转后缀,计算后缀表达式 栈+队列计算,包括...

  • 中缀表达式转后缀表达式

    将中缀表达式转为后缀表达式,输入 a+bc/d-a+f/b 输出 abcd/+a-fb/+要求:语言不限;输入输出...

  • 数据结构与算法--后缀表达式

    中缀表达式转后缀表达式 中缀表达式转后缀表达式的思路步骤分析。 初始化一个栈和一个队列,运算符栈 S1 和存储中间...

  • Python 简单计算器-逆波兰后缀表达式实现

    中缀表达式 后缀表达式 简易计算器,可以通过栈来实现。然而如果直接使用中缀表达式,需要处理括号,而使用后缀表达式则...

网友评论

      本文标题:利用栈将中缀转为后缀

      本文链接:https://www.haomeiwen.com/subject/mgjhbctx.html