| 什么是波蘭表達式 早在1920年,波蘭科學(xué)家揚·武卡謝維奇就發(fā)明了一種不需要括號的表示法,可以用來表示一個計算表達式。即將操作符號寫在操作數(shù)之前,也就是前綴表達式,即波蘭式(Polish Notation, PN)。這種表達式直到1960年計算機出現(xiàn)后才發(fā)揮出其威力 比如2 + 3 * (5 - 1)這個表達式的前綴表達式為+ 2 * 3 - 5 1來表示。 可以看到,這種計算過程也相當(dāng)復(fù)雜,需要多次遍歷表達式,而且需要識別一個操作符后面跟著兩個操作數(shù)這種模式,相比而言,下文中的逆波蘭式要更為直接和簡單。 什么是逆波蘭表達式 即后綴表達式,更加廣為人知一些,和前綴表達式剛好相反,是將操作符號放置于操作數(shù)之后 比如2 + 3 * (5 - 1)用逆波蘭式來表示則是:2 3 5 1 - * +。 上面這個步驟可以很容易的用棧來實現(xiàn): 實現(xiàn):     //計算后綴表達式 public static int calculateHouzhui(List<String> list){ Stack<String> s=new Stack<String>(); for(String ob:list){ if(!operator.contains(ob)){ s.add(ob); }else{ String b=s.pop(); String a=s.pop(); String value=calculate(a, b, ob)+""; s.add(value); } } return Integer.parseInt(s.pop()); } public static int calculate(String a,String b,String operator){ int aa=Integer.parseInt(a); int bb=Integer.parseInt(b); if(operator.equals("+")){ return aa+bb; }else if(operator.equals("-")){ return aa-bb; }else if(operator.equals("*")){ return aa*bb; }else if(operator.equals("/")){ return aa/bb; } return 0; } 中綴表達式轉(zhuǎn)換為后綴表達式  (1)當(dāng)讀到數(shù)字直接送至輸出隊列中 
 后綴表達式轉(zhuǎn)中綴表達式 思路:和計算后綴表達式類似。從左往右依次讀取表達式,如果是數(shù)字則將該數(shù)字壓棧,如果是符號,則將之前的兩個數(shù)字出棧,拼接符號,并壓棧,記錄該符號棧,壓棧之前與之前記錄的操作符做比較。如果當(dāng)前操作符大于記錄值。則棧中表達式 需要加括號 
 
 
 | 
|  | 
來自: 新用戶1182rNZ4 > 《待分類》