Java examples for Data Structure:Inverse Poland Expression
get Inverse Poland Expression
//package com.java2s; import java.util.ArrayList; import java.util.List; import java.util.Stack; public class Main { public static void main(String[] argv) throws Exception { String normalExpression = "java2s.com"; System.out.println(getInversePolandExpression(normalExpression)); }// w w w . jav a 2s . c om static private List<String> getInversePolandExpression( String normalExpression) { List<String> inversePolandExpression = new ArrayList<String>(); char[] normalChararray = (normalExpression + "$").toCharArray(); // Stack<String> signStack = new Stack<String>(); List<Stack<String>> signStackList = new ArrayList<Stack<String>>(); signStackList.add(signStack); // int level = 0; int pointPosition = 0; double tempNumber = 0; boolean isInInteger = true; for (int i = 0; i < normalChararray.length; i++) { char tempChar = normalChararray[i]; // if (tempChar >= '0' && tempChar <= '9') { // if (isInInteger) { tempNumber = tempNumber * 10 + (int) (tempChar - 48); } // ? else { tempNumber += (double) (tempChar - 48) * Math.pow(0.1, i - pointPosition); } } // ? else if (tempChar == '.') { isInInteger = false; pointPosition = i; } // else if (tempChar == '+' || tempChar == '-' || tempChar == '*' || tempChar == '/' || tempChar == '$') { // isInInteger = true; // ? if (tempNumber > 0) { inversePolandExpression.add(String.valueOf(tempNumber)); } // 0 tempNumber = 0; // ??? if ((tempChar == '+') || (tempChar == '-') || tempChar == '$') { while (!signStackList.get(level).isEmpty()) { // inversePolandExpression.add(signStackList .get(level).pop()); } } // ? signStackList.get(level).push(tempChar + ""); } else if (tempChar == '(') { signStack = new Stack<String>(); signStackList.add(signStack); level++; } else if (tempChar == ')') { // isInInteger = true; // ? if (tempNumber > 0) { inversePolandExpression.add(String.valueOf(tempNumber)); } // 0 tempNumber = 0; // ??? while (!signStackList.get(level).isEmpty()) { // inversePolandExpression.add(signStackList.get(level) .pop()); } level--; } } return inversePolandExpression; } }