• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

java 搞代码 4年前 (2022-01-09) 17次浏览 已收录 0个评论

以下实例演示了如何使用堆栈进行表达式的堆栈将中缀(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:             o<p>本文来源gao!daima.com搞$代!码#网#</p>utput = 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 实例 – 利用堆栈将中缀表达式转换成后缀表达式的内容,更多相关内容请关注搞代码(www.gaodaima.com)!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Java 实例 – 利用堆栈将中缀表达式转换成后缀表达式
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址