字尾表示式求解

2022-09-13 07:36:13 字數 576 閱讀 1028

問題描述:

字尾表示式也叫逆波蘭式,中綴到字尾舉例:

( 4 + 2 ) * ( 3 + 6 ) => 4 2 + 3 6 + *

(3 + 4 / 2) - 5 => 3 4 2 / + 5 -

問題是求解類似以上右側的字尾表示式。

思路1(遞迴):

1. 從右向左掃瞄

2. 因為字尾表示式裡都是雙目運算子,且沒有括號,所以遇到操作符可以遞迴求解,例如遇到乘號:

case '*':

return exp() * exp();

思路2(棧):

1. 維護數字棧

2. 從左向右掃瞄,遇到數字則入棧,遇到符號則出棧兩個數字,計算後再入棧新數字,字尾表示式的特點就是方便計算,直接按操作符順序和數字逆序計算即可。

邊界case:

1. 分母為0

2. 數字範圍超出上下限

知識點:

1. 遞迴求解

2. 樹:字尾表示式可以畫成樹狀,這樣理解遞迴更方便

3. 棧

難度:★★★

**:見字首表示式求解,與此類似。

字尾表示式求解

思路 根據輸入的字串 遇到數字 入棧 遇到運算子彈出兩個數字計算,計算結果入棧,最後棧中剩餘的數字就是最終結果。示例 字尾表示式求解 void postfix char str stack s i printf d top s 完整程式 include include include include...

求解字尾表示式 RPN

package stack.rpn import stack.alstack 計算rpn的值 author kyle version 1.0 public class calcrpn 計算字尾表達是的值,目前只支援整數 return private static int calc string ex...

C語言 利用 字尾表示式 求解 中綴表示式

一名大一初學狗,最近在學習棧的應用,在此記錄解題 題目描述 給出乙個表示式,其中運算子僅包含 要求求出表示式的最終值 資料可能會出現括號情況,還有可能出現多餘括號情況 資料保證不會出現 maxlongint的資料 資料可能回出現負數情況 輸入僅一行,即為表示式 輸出僅一行,既為表示式算出的結果 樣例...