plamen911

12. Infix to Postfix

Feb 2nd, 2017
931
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.41 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. public class Main {
  4.     public static void main(String[] args) {
  5.         Locale.setDefault(Locale.ROOT);
  6.  
  7.         Scanner sc = new Scanner(System.in);
  8.  
  9.         String[] input = sc.nextLine().split("\\s+");
  10.         Deque<String> numbersQueue = new ArrayDeque<>();
  11.         Deque<String> operatorStack = new ArrayDeque<>();
  12.  
  13.         for (String s : input) {
  14.             if (Character.isDigit(s.charAt(0)) || Character.isLetter(s.charAt(0))) {
  15.                 numbersQueue.offer(s);
  16.             } else {
  17.                 if (operatorStack.isEmpty()) {
  18.                     operatorStack.push(s);
  19.                 } else {
  20.                     String lastOperator = operatorStack.peek();
  21.                     switch (s) {
  22.                         case "+":
  23.                         case "-":
  24.                             if (lastOperator.equals("(")) {
  25.                                 operatorStack.push(s);
  26.                             } else {
  27.                                 numbersQueue.offer(operatorStack.pop());
  28.                                 operatorStack.push(s);
  29.                             }
  30.                             break;
  31.                         case "*":
  32.                         case "/":
  33.                             if (lastOperator.equals("*") || lastOperator.equals("/")) {
  34.                                 numbersQueue.offer(operatorStack.pop());
  35.                                 operatorStack.push(s);
  36.                             } else {
  37.                                 operatorStack.push(s);
  38.                             }
  39.                             break;
  40.                         case "(":
  41.                             operatorStack.push(s);
  42.                             break;
  43.                         case ")":
  44.                             while (!operatorStack.peek().equals("(")) {
  45.                                 numbersQueue.offer(operatorStack.pop());
  46.                             }
  47.                             //Removing the non-necessary open parenthesis '('
  48.                             operatorStack.pop();
  49.                             break;
  50.                     }
  51.                 }
  52.             }
  53.         }
  54.  
  55.         while (!numbersQueue.isEmpty()) {
  56.             System.out.print(numbersQueue.poll() + " ");
  57.         }
  58.  
  59.         while (!operatorStack.isEmpty()) {
  60.             System.out.print(operatorStack.pop() + " ");
  61.         }
  62.         System.out.println();
  63.     }
  64. }
Advertisement
Add Comment
Please, Sign In to add comment