PAT 計算中綴表示式(沒有括號版本)

2021-10-23 20:56:41 字數 947 閱讀 6988

#include#include#include#include#includeusing namespace std;

struct node;

string str;

stacks; //操作符棧

queueq; //字尾表示式序列

mapop; // 操作符優先順序

/*中綴 -> 字尾

1. 如果是運算元,直接加入字尾表示式

2. 如果是括號,左括號直接入棧,後括號則一次彈出棧內運算子並加入字尾表示式,

直到彈出左括號或棧空(括號不加入字尾表示式)

3. 遇到運算子,依次彈出優先順序》=當前運算子的所有運算子,加入字尾表示式,

直到遇到左括號或者棧空。然後把當前運算子入棧

4. 最後如果有剩餘運算子,依次彈出並加入字尾表示式

*/ void change()

}else

temp.op = str[i];

s.push(temp); //把該操作符壓入操作棧中

i++;

} //如果操作符棧中還有操作符,就把它彈出到字尾表示式佇列中

while(!s.empty())

} }/*計算字尾表示式:

1. 如果掃瞄到運算元,壓入棧

2. 如果掃瞄到操作符,則彈出兩個棧頂元素,temp2和temp1,計算,將結果壓入棧

*/ double cal() else

} return s.top().num; //棧頂元素就是字尾表示式的值

} int main()

while(!s.empty()) s.pop(); //初始化棧

change(); //中綴 -> 字尾

printf("%.2lf\n", cal()); //計算字尾表示式

} return 0;

}

計算中綴表示式

計算中綴表示式 可以稱得上是乙個特別經典的關於棧的演算法題,幾乎在所有資料結構教材中都會涉及,而且很多公司面試或者筆試的時候都會把這道題作為乙個考察點。可以說,這是一道必須要掌握的演算法題。中綴表示式 字尾表示式等概念在這裡就不贅述了,讓我們直奔主題。題目 輸入乙個中綴表示式,計算其結果。輸入的前提...

中綴表示式計算

雙棧法 數字棧和運算子棧 1.從前向後遇見數字就壓入數字棧 2.遇見左括號壓棧 3.遇見右括號則彈出數字棧頂兩個數字,和乙個運算子棧乙個運算子進行計算,直至遇見左括號,退括號,計算結果壓棧 4.遇見運算子,若符號棧頂的元素小於當前運算子優先順序,則入棧 若相等或大於則數字彈出倆,符號彈出乙個計算,直...

SICILY 中綴表示式轉字尾表示式 無括號

將乙個中綴表示式轉為乙個字尾表示式。主要思想是遍歷整個字串陣列,遇到字母直接輸出,遇到運算子則放入乙個棧中,若棧中已有元素,則再次遍歷到運算子時應該將當前運算子與棧頂元素比較,若棧頂元素優先順序高,則將棧頂元素輸出並pop掉,使當前元素繼續與新的棧頂元素進行比較。特別需要注意的是 若當前元素與棧頂元...