字首表示式又稱波蘭式,字首表示式的運算子位於運算元之前。比如:- × + 3 4 5 6
中綴表示式就是常見的運算表示式,如(3+4)×5-6
字尾表示式又稱逆波蘭表示式,與字首表示式相似,只是運算子位於運算元之後,比如:3 4 + 5 × 6 -
人類最熟悉的一種表示式1+2,(1+2)3,3+42+4等都是中綴表示法。對於人們來說,也是最直觀的一種求值方式,先算括號裡的,然後算乘除,最後算加減,但是,計算機處理中綴表示式卻並不方便。
我們先看乙個例子 (3+4)× 5 - 6
字尾表示式3 4 + 5 × 6 -
的計算
從左至右掃瞄,將3和4壓入堆疊;
遇到+運算子,因此彈出4和3(4為棧頂元素,3為次頂元素,注意與字首表示式做比較),計算出3+4的值,得7,再將7入棧;
將5入棧;
接下來是×運算子,因此彈出5和7,計算出7×5=35,將35入棧;
將6入棧;
最後是-運算子,計算出35-6的值,即29,由此得出最終結果。
1.數字直接入佇列
2.運算子要與棧頂元素比較
①棧為空直接入棧
②運算子優先順序大於棧頂元素優先順序則直接入棧
③小於或等於則出棧入列,再與棧頂元素進行比較,直到運算子優先順序小於棧頂元
素優先順序後,操作符再入棧
3.操作符是(
則無條件入棧
4.操作符為)
,則依次出棧入列,直到匹配到第乙個「(」
為止,此操作符直接捨棄,「(」
直接出棧捨棄
public class suffixalgorithm
if (digital) else
if(o == right_bracket)
//將operators棧頂彈出壓入output直到左括號
while (!operators.empty())
output.push(top);
}bracket--;
continue;
}char p;
while (!operators.empty()
&& ( p = operators.peek()) != left_bracket
&& operator.cmp(o, p) <= 0)
operators.push(o);}}
while (!operators.empty())
}public static void main(string args)
public static string rpn(string exp){
stackoperators = new stack<>();
stackoutput = new stack();
rpn(operators, output, exp);
string str = "";
for(int i=0; i
逆波蘭表示式 中綴表示式 字尾表示式
1 我們這裡要實現的是 將中綴表示式轉換成字尾表示式,然後再計算最終結果,參考部落格。具體轉化演算法如下 中綴表示式a b c d e f g,其轉換成字尾表示式則為abc de f g 轉換過程需要用到棧,具體過程如下 1 如果遇到運算元,我們就直接將其輸出。2 如果遇到操作符,則我們將其放入到棧...
逆波蘭表示式 中綴表示式 字尾表示式
1 我們這裡要實現的是 將中綴表示式轉換成字尾表示式,然後再計算最終結果,參考部落格。具體轉化演算法如下 中綴表示式a b c d e f g,其轉換成字尾表示式則為abc de f g 轉換過程需要用到棧,具體過程如下 1 如果遇到運算元,我們就直接將其輸出。2 如果遇到操作符,則我們將其放入到棧...
字尾表示式 逆波蘭表示式 轉換
維基百科 字尾表示式 將中綴表示式轉換為字尾表示式,比如 5 2 8 3 4轉換為5 2 8 3 4 將表示式的字元逐一處理,如果是數字 變數 則直接輸出,如果是字元入棧,並按以下規則進行處理.低優先順序,所以將棧中的所有運算子出棧,之後將自己入棧.or 高優先順序,將棧中的其他乘除運算子出棧,之後...