表示式求值 棧實現

2021-07-24 21:36:53 字數 1394 閱讀 9746

宣告: 僅個人小記

演算法思想:

一、 設定乙個運算子棧,設定乙個字尾表示式字串

二、 從左到右依次對中綴表示式中的每個字元ch分別進行一下處理,直至表示式結束:

1.若ch是左括號』(『,將其入棧

2.若 ch 是數字,將其後連續若干數字新增到字尾表示式字串之後,在新增空格作為分割符

3. 若ch是運算子,先將棧頂若干優先順序高於ch的運算子出棧,新增到字尾表示式字串之後,再將ch入棧。當』(『運算子在棧中時,它的優先順序最底。

4.若ch是右括號』)』,則若干運算子出棧,直到出棧的左括號,表示一對括號匹配

三、 若表示式結束,將棧中運算子全部出棧,新增到字尾表示式字串之後。

實現**如下:

#include 

#include

using

namespace

std;

string topostfix(string input); // 中綴 轉為 字尾

int calc(string postfixexp);// 對字尾表示式進行計算

int main(void)

string topostfix(string input)

s.push(input[i]);

i ++;

break;

case

'*':

case

'/':

while(!s.empty() && (s.top() == '*' || s.top() == '/'))

s.push(input[i]);

i ++;

break;

case

'(':

s.push(input[i]);

i ++;

break;

case

')':

while(s.top() != '(')

s.pop();

i ++;

break;

default:

int value = 0;

while(input[i] >= '0' && input[i] <= '9')

postfixexp.push_back(' ');

break;}}

while(!s.empty())

return postfixexp;

} int calc(string postfixexp)

s.push(value);

i ++;

}else

i ++;}}

return s.top();

}

2023年11月25日 14:21:13

by jack lu

表示式求值(棧)

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 acm隊的mdd想做乙個計算器,但是,他要做的不僅僅是一計算乙個a b的計算器,他想實現隨便輸入乙個表示式都能求出它的值的計算器,現在請你幫助他來實現這個計算器吧。比如輸入 1 2 4 程式就輸出1.50 結果保留兩位小數 輸入...

棧 表示式求值

核心演算法思想 1.運用兩個棧,乙個存運算子,乙個存數值 2.以 做為標誌位,開頭或者結尾 3.檢查當前字元,若當前字元為數值,則加入數值棧,若為運算子,則檢驗當前運算子的優先順序,1 若當前運算子優先順序大於棧頂優先順序,則把該運算子壓入棧 2 若當前運算子優先順序等於棧頂優先順序 括號的情況 則...

棧 表示式求值

把運算的處理專門放在乙個函式裡,然後通過優先順序的判斷去呼叫函式,注意那個 還是放在else if裡面吧,不要和運算混在一起了 includeusing namespace std const int n 1e5 10 stacks1 stacks2 int flag 0 處理 四個 mapcmp ...