09 逆波蘭計算器

2022-08-02 08:21:06 字數 1734 閱讀 9042

【舉例說明】針對上例的 求值步驟如下(棧頂 ▢ 次頂):

中綴表示式就是常見的運算表示式,如 (3+4)×5-6。中綴表示式的求值是我們人最熟悉的,但是對計算機來說卻不好操作(《08-案例》就能看的這個問題)。因此,在計算結果時,往往會將中綴表示式轉成其它表示式來操作(一般轉成「字尾表示式」)。

【舉例說明】針對上例的 求值步驟如下(次頂 ▢ 棧頂)

字尾表示式適合計算式進行運算,但是人卻不太容易寫出來,尤其是表示式很長的情況下。因此在開發中,我們需要將中綴表示式 → 字尾表示式。

思路

public class polandnotaion 

// 將中綴表示式(算式)由 string → list

public static listtoinfixexpressionlist(string str) else

list.add(temp);

temp = "";}}

return list;

/*c = arr[i];

if (c < 48 || c > 57) else

list.add(temp);

temp = "";

}這麼寫不對, **有問題涅?

"temp += c" 出的問題, 當 i++ 後, 如果依舊滿足 while 條件, 那麼此時

temp 加的就還是上次的字元, 它會一直重複追加 c, 直到 i == length

比如, c = '3', 照上述這種寫法, 出來的時候, temp = 333333...*/}

// 中綴表示式 list → 字尾表示式 list

public static listparsesuffixexpression(string infixexpression) else if (s1.isempty() || item.equals("(")) else if (item.equals(")")) else 彈出並壓入 s2 中

s2.add(s1.pop());

}s1.push(item);}}

// 將 s1 中剩餘的運算子依次彈出並加入 s2

while (s1.size() != 0) s2.add(s1.pop());

// 依次彈出 s2 中的元素並輸出,結果的逆序即為中綴表示式對應的字尾表示式

// 因為 s2 是 list, 所以存放的順序就是最終字尾表示式的順序

return s2;

}// 完成對逆波蘭表示式的計算

public static int calculate(listlist) else

}return integer.parseint(stack.pop());

}// 返回運算子優先順序(擬定為:優先順序使用數字表示, 數字越大, 則優先順序越高)

逆波蘭計算器

include include include define stack init size 20 初始化棧的空間 define stackincrement 10 擴充套件空間 define maxbuffer 10 最大緩衝區 typedef double elemtype 建立乙個棧 type...

逆波蘭計算器

1.逆波蘭表示式用途 逆波蘭表示式是一種十分有用的表示式,它將複雜表示式轉換為可以依靠簡單的操作得到計算結果的表示式。例如 a b c d 轉換為ab cd 2.逆波蘭表示式邏輯實現 如果當前字元為變數或者為數字,則壓棧,如果是運算子,則將棧頂兩個元素彈出作相應運算,結果再入棧,最後當表示式掃瞄完後...

逆波蘭計算器

遍歷表示式。碰到數字將其放到棧中。遇到計算符 從棧中彈出兩個數用計算然後再從新入棧。a 在棧中的最後乙個數即為結果 轉換前 2 9 6 3 5 4轉換後 2963 5 4 使用逆波蘭計算結果為 16.0public class rpncalculator 如果是不是計算符,直接入棧 stack.pu...