Java 实例 _ 利用堆栈将中缀表达式转换成后缀表达式

Java 实例 Java 实例

以下实例演示了如何使用堆栈进行表达式的堆栈将中缀(Infix)表达式转换成后缀(postfix)表达式:

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 实例 Java 实例

0 个评论

要回复文章请先登录注册