广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 软件教程 > Java技术 > 正文

惠州怎么把中缀表达式转换成后缀表达式?_北大青鸟IT计算机学校

作者:邓华发布时间:2021-03-22分类:Java技术浏览:706


导读:怎么把中缀表达式转换成后缀表达式?惠州北大青鸟学术部老师表示利用堆栈,下面惠州北大青鸟老师给大家演示一下。

怎么把中缀表达式转换成后缀表达式?惠州北大青鸟学术部老师表示利用堆栈,下面惠州北大青鸟老师给大家演示一下。以下实例演示了如何使用堆栈进行表达式的堆栈将中缀(Infix)表达式转换成后缀(postfix)表达式:

/*
author by w3cschool.cc
InToPost.java
*/

import java.io.IOException;

public class InToPost {
  private Stack theStack;
  private String input;
  private String output = "";
  public InToPost(String in) {
     input = in;
     int stackSize = input.length();
     theStack = new Stack(stackSize);
  }
  public String doTrans() {
     for (int j = 0; j < input.length(); j++) {
        char ch = input.charAt(j);
        switch (ch) {
           case '+':
           case '-':
           gotOper(ch, 1);
           break;
           case '*':
           case '/':
           gotOper(ch, 2);
           break;
           case '(':
           theStack.push(ch);
           break;
           case ')':
           gotParen(ch);
           break;
           default:
           output = output + ch;
           break;
        }
     }
     while (!theStack.isEmpty()) {
        output = output + theStack.pop();
     }
     System.out.println(output);
     return output;
  }
  public void gotOper(char opThis, int prec1) {
     while (!theStack.isEmpty()) {
        char opTop = theStack.pop();
        if (opTop == '(') {
           theStack.push(opTop);
           break;
        }
        else {
           int prec2;
           if (opTop == '+' || opTop == '-')
           prec2 = 1;
           else
           prec2 = 2;
           if (prec2 < prec1) {
              theStack.push(opTop);
              break;
           }
           else
           output = output + opTop;
        }
     }
     theStack.push(opThis);
  }
  public void gotParen(char ch){
     while (!theStack.isEmpty()) {
        char chx = theStack.pop();
        if (chx == '(')
        break;
        else
        output = output + chx;
     }
  }
  public static void main(String[] args)
  throws IOException {
     String input = "1+2*4/5-7+3/6";
     String output;
     InToPost theTrans = new InToPost(input);
     output = theTrans.doTrans();
     System.out.println("Postfix is " + output + '\n');
  }
  class Stack {
     private int maxSize;
     private char[] stackArray;
     private int top;
     public Stack(int max) {
        maxSize = max;
        stackArray = new char[maxSize];
        top = -1;
     }
     public void push(char j) {
        stackArray[++top] = j;
     }
     public char pop() {
        return stackArray[top--];
     }
     public char peek() {
        return stackArray[top];
     }
     public boolean isEmpty() {
        return (top == -1);
    }
  }
}

以上代码运行输出结果为:

124*5/+7-36/+
Postfix is 124*5/+7-36/+

想了解更多关于Java的资讯吗?可以来惠州北大青鸟新方舟校区了解一下。

Java19.jpg

Java

标签:惠州计算机JAVA软件开发惠州计算机Java软件开发惠州计算机JAVA培训惠州计算机JAVA软件开发学校惠州计算机Java软件开发培训JAVAJava软件开发北大青鸟IT计算机学校北大青鸟IT软件学校北大青鸟IT学校


Java技术排行
标签列表
网站分类
文章归档
最近发表