具體步驟如下:
遇到括號時:
重複步驟2至5,直到表示式的最右邊
將s1中剩餘的運算子依次彈出並壓入s2
依次彈出s2中的元素並輸出,結果的逆序即為中綴表示式對應的字尾表示式
例如:中綴表示式 1+((2+3)*4)-5 =>轉成字尾表示式 123+4x+5-**實現(只考慮正整數)
public class polandnotation
//中綴轉字尾
=>轉成123+4x+5-
//2.因為直接對str.,進行操作,不方便,因此先將"1+((2+3)x4)-5" =》中綴的表示式對應的list
//即"1+((2+3)x4)-5" => arraylist [1,+,(,(,2,+,3,),*,4,),-,5]
public static listchange(string middle)else
list.add(str);
}}while (i < middle.length());
return list;
}//3.將得到的中綴表示式對應的list =>字尾表示式對應的list
// 即arraylist [1,+,(,(,2,+,3,),*,4,),-,5] =》 arraylist [1,2,3,+,4,*,+,5,-]
public static listchange2(listlist)else if (item.equals("("))else if (item.equals(")"))
s1.pop();//彈出"("
}else
s1.push(item);}}
//將s1中剩餘的運算子依次彈出並加入s2
while (s1.size()!=0)
return s2;
}public static int calculate(listls)else else if (item.equals("-"))else if (item.equals("*"))else if (item.equals("/"))else
stack.push(res + "");}}
return integer.parseint(stack.pop());
}}//比較優先順序
class operation
return result;}}
中綴轉字尾 逆波蘭表示
計算機無法識別數學表示式中的括號以及四則運算的先後順序,因此需要把數學表達示轉換成一種計算機能識別的,逆波蘭表示就能很好的解決這個問題。逆波蘭表示是數學表示式中的一種不需要括號的字尾表達法。即把乙個中綴數學表示式改變成乙個字尾表示。中綴表示的意思就是運算子在要計算的數字中間,而字尾表示就是運算子在要...
逆波蘭計算 中綴轉字尾 字尾表示式計算
我們利用棧將中綴表示式轉換為字尾表示式 逆波蘭表示式 來計算表示式 此程式支援整數運算 遍歷中綴表示式,遇到運算元就輸出,遇到符號就壓入棧中 棧中的運算子為掛起狀態 但是操作符的壓棧出棧有如下規則 碰到運算元壓入棧中,碰到運算子提取棧頂兩個元素進行相應的操作,將運算元壓入棧中,直到整個表示式遍歷完成...
逆波蘭中綴轉字尾表示式並求值
建立鏈棧 linkstack.h pragma once typedef int elemtype typedef struct node node typedef struct linkstack linkstack,ptrstack 初始化 void init ptrstack stack 入棧...