資料結構 表示式求值

2022-06-20 00:57:07 字數 1425 閱讀 2802

【題目鏈結】

【題目描述】

給出乙個表示式,其中運算子僅包含+,-,*,/,^(加 減 乘 整除 乘方)要求求出表示式的最終值。

資料可能會出現括號情況,還有可能出現多餘括號情況。

資料保證不會出現大於或等於2

31'>

231的答案。

資料可能會出現負數情況。

輸入格式

輸入僅一行,即為表示式。

輸出格式

輸出僅一行,既為表示式算出的結果。

輸入樣例:

(2+2)^(1+1)
輸出樣例:
16

【題解】:

1、處理括號問題,由於又多餘的括號,我們發現左括號是沒有用的,所以我們匹配盡量多的左括號,然後配上乙個右括號即可。

2、維護兩個棧的操作。

第乙個棧 是維護運算元,如果運算的時候就彈出兩個出來,然後運算結果又放回去,最後求數字棧的棧頂元素即可。

第二個棧 是維護乙個嚴格遞增的操作符,操作符是優先順序的。「+」 = 「-」

【**】**是仿造y總的寫法,不得不說,y總碼力十足。

1 #include

2 #include3 #include4

using

namespace

std;

56 stack < int >nums ;

7 stack < char >ops ;

8void

calc()

20nums.push( tmp ) ;21}

2223

intmain()

2444

nums.push(tmp);

45 i = j - 1

;46 }else

else

if( c == '

+' || c == '-'

)59 nums.push(-tmp);

60 i = j - 1

;61 }else

65 }else

if( c == '

*' || c == '/'

)else

if( c == '^'

)else

if( c == ')'

)else puts("

invaild operator !");

76}77}

78 cout << nums.top() <

79return0;

80 }

view code

資料結構 表示式求值

一 實驗目的 通過乙個具體實際應用例子,加深對資料結構課程的理解,能夠綜合利用資料結構以及c語言的知識設計程式,應用到實際問題中去。二 實驗題目 常見的小型計算器可以通過輸入乙個由運算元和操作符組成的表示式計算出結構,設計乙個程式模擬上述功能。本實驗要求至少建立兩個棧和乙個運算子優先順序比較表,按照...

資料結構 表示式求值

程式 如下 1 include 2 include 3 include 45 define stack init size 100 6 define stackincrement 10 7 define overflow 2 8 define ok 1 9 define error 0 1011 t...

資料結構 表示式求值 1

在乙個表示式中,只有 0 9 請求出表示式的值。用整數除法 輸入格式 共1 行,為乙個算式。算式長度 30 其中所有資料在 0 2 31 1的範圍內 輸出格式 共一行,為表示式的值。輸入樣例 在這裡給出一組輸入。例如 1 3 2 7 2 69 2 輸出樣例 在這裡給出相應的輸出。例如 include...