import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
public class Main {
public static void main
(String[] args
) { // TODO Auto-generated method stub
/** input 是測試資料**/
String input
= "(((a+b)*c)/(d-e))"; InfixToPrefix(input);
}
public static void InfixToPrefix
(String input
) { // 只能用3個Q
Queue<Character> Q1 = new LinkedList<Character>();
// stack(用兩個Q來模擬,故Q的數量已經用完)
Stack<Character> s = new Stack<>();
// 整個掃過一次
for (int index = 0; index < input.length(); index++) {
// ch是用來重複檢驗的輸入
char ch = input.charAt(index);
// 輸入是'('或者是變數, 推入stack s中
if (ch != ')' && !isOperator(ch))
s.push(ch);
else {
// 若是 operator
if (isOperator(ch)) {
// 把到'('以前的內容都拉出來 , 存到Q1內
while (!s.isEmpty() && s.peek() != '(')
Q1.add(s.pop());
// 再放回去
while (!Q1.isEmpty())
s.push(Q1.poll());
// 再拿出來
while (!s.isEmpty() && s.peek() != '(')
Q1.add(s.pop());
// 如此以後這群Q1內的東西再放回去s時順序才不會反序
// 把'('清除
s.pop();
// 把該operator加入stack內
s.push(ch);
// 把剛剛拿出來的全丟進去
while (!Q1.isEmpty())
s.push(Q1.poll());
}
}
}
// 貼出內容
while (!s.isEmpty())
Q1.add(s.pop());
while (!Q1.isEmpty())
s.push(Q1.poll());
while (!s.isEmpty())
}
public static boolean isOperator
(Character c
) { if (c == '+' || c == '-' || c == '*' || c == '/')
return true;
return false;
}
}
aW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwppbXBvcnQgamF2YS51dGlsLlF1ZXVlOwppbXBvcnQgamF2YS51dGlsLlN0YWNrOwoKcHVibGljIGNsYXNzIE1haW4gewoKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCgkJCgkJLyoqIGlucHV0IOaYr+a4rOippuizh+aWmSoqLwoJCVN0cmluZyBpbnB1dCA9ICIoKChhK2IpKmMpLyhkLWUpKSI7CgkJSW5maXhUb1ByZWZpeChpbnB1dCk7Cgl9CgoJcHVibGljIHN0YXRpYyB2b2lkIEluZml4VG9QcmVmaXgoU3RyaW5nIGlucHV0KSB7CgkJLy8g5Y+q6IO955SoM+WAi1EKCQlRdWV1ZTxDaGFyYWN0ZXI+IFExID0gbmV3IExpbmtlZExpc3Q8Q2hhcmFjdGVyPigpOwoJCS8vIHN0YWNrKOeUqOWFqeWAi1HkvobmqKHmk6ws5pWFUeeahOaVuOmHj+W3sue2k+eUqOWujCkKCQlTdGFjazxDaGFyYWN0ZXI+IHMgPSBuZXcgU3RhY2s8PigpOwoJCS8vIOaVtOWAi+aOg+mBjuS4gOasoQoJCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBpbnB1dC5sZW5ndGgoKTsgaW5kZXgrKykgewoJCQkvLyBjaOaYr+eUqOS+humHjeikh+aqoumpl+eahOi8uOWFpQoJCQljaGFyIGNoID0gaW5wdXQuY2hhckF0KGluZGV4KTsKCQkJLy8g6Ly45YWl5pivJygn5oiW6ICF5piv6K6K5pW4LCDmjqjlhaVzdGFjayBz5LitCgkJCWlmIChjaCAhPSAnKScgJiYgIWlzT3BlcmF0b3IoY2gpKQoJCQkJcy5wdXNoKGNoKTsKCQkJZWxzZSB7CgkJCQkvLyDoi6XmmK8gb3BlcmF0b3IKCQkJCWlmIChpc09wZXJhdG9yKGNoKSkgewoJCQkJCS8vIOaKiuWIsCcoJ+S7peWJjeeahOWFp+WuuemDveaLieWHuuS+hiAsIOWtmOWIsFEx5YWnCgkJCQkJd2hpbGUgKCFzLmlzRW1wdHkoKSAmJiBzLnBlZWsoKSAhPSAnKCcpCgkJCQkJCVExLmFkZChzLnBvcCgpKTsKCQkJCQkvLyDlho3mlL7lm57ljrsKCQkJCQl3aGlsZSAoIVExLmlzRW1wdHkoKSkKCQkJCQkJcy5wdXNoKFExLnBvbGwoKSk7CgkJCQkJLy8g5YaN5ou/5Ye65L6GCgkJCQkJd2hpbGUgKCFzLmlzRW1wdHkoKSAmJiBzLnBlZWsoKSAhPSAnKCcpCgkJCQkJCVExLmFkZChzLnBvcCgpKTsKCQkJCQkvLyDlpoLmraTku6XlvozpgJnnvqRRMeWFp+eahOadseilv+WGjeaUvuWbnuWOu3PmmYLpoIbluo/miY3kuI3mnIPlj43luo8KCgkJCQkJLy8g5oqKJygn5riF6ZmkCgkJCQkJcy5wb3AoKTsKCQkJCQkvLyDmioroqbJvcGVyYXRvcuWKoOWFpXN0YWNr5YWnCgkJCQkJcy5wdXNoKGNoKTsKCQkJCQkvLyDmiorliZvliZvmi7/lh7rkvobnmoTlhajkuJ/pgLLljrsKCQkJCQl3aGlsZSAoIVExLmlzRW1wdHkoKSkKCQkJCQkJcy5wdXNoKFExLnBvbGwoKSk7CgkJCQl9CgkJCX0KCQl9CgkJLy8g6LK85Ye65YWn5a65CgkJd2hpbGUgKCFzLmlzRW1wdHkoKSkKCQkJUTEuYWRkKHMucG9wKCkpOwoJCXdoaWxlICghUTEuaXNFbXB0eSgpKQoJCQlzLnB1c2goUTEucG9sbCgpKTsKCQl3aGlsZSAoIXMuaXNFbXB0eSgpKQoJCQlTeXN0ZW0ub3V0LnByaW50KHMucG9wKCkpOwoJfQoKCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc09wZXJhdG9yKENoYXJhY3RlciBjKSB7CgkJaWYgKGMgPT0gJysnIHx8IGMgPT0gJy0nIHx8IGMgPT0gJyonIHx8IGMgPT0gJy8nKQoJCQlyZXR1cm4gdHJ1ZTsKCQlyZXR1cm4gZmFsc2U7Cgl9Cgp9Cg==