자바 입문 - 데이터 구조 작업 인 스 턴 스 는 스 택 을 이용 하여 접미사 표현 식 을 접미사 표현 식 으로 변환 합 니 다.

스 택 을 사용 하여 표현 식 스 택 을 만 드 는 방법 을 보 여 줍 니 다. 접두사 (Infix) 표현 식 을 접두사 (postfix) 표현 식 으로 변환 하 는 방법 을 보 여 줍 니 다.
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 + '');   }   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/+

좋은 웹페이지 즐겨찾기