time limit: 1000ms memory limit: 65536k
對於乙個基於二元運算子的算術表示式,轉換為對應的字尾式,並輸出之。
輸入乙個算術表示式,以『#』字元作為結束標誌。
輸出該表示式轉換所得到的字尾式。
a*b+(c-d/e)*f#
ab*cde/-f*+
今天我看了一下棧,就是算數的字尾式
字尾式主要的轉換是
/* 將中綴表示式(a+b)轉換為字尾表示式(ab+)的演算法思想:
·當讀到數字直接送至輸出佇列中
·當讀到運算子t時,
a.將棧中所有優先順序高於或等於t的運算子彈出,送到輸出佇列中;
b.t進棧
·讀到左括號時總是將它壓入棧中
·讀到右括號時,將靠近棧頂的第乙個左括號上面的運算子全部依次彈出,送至輸出佇列後,再丟棄左括號。
運用字尾表示式進行計算的具體做法:
·建立乙個棧s
·從左到右讀字尾表示式,讀到數字就將它轉換為數值壓入棧s中,讀到運算子則從棧中依次彈出兩個數分別到y和x,然後以「x 運算子 y」的形式計算機出結果,再壓加棧s中
·如果字尾表示式未讀完,就重複上面過程,最後輸出棧頂的數值則為結束 */
**實現是:(這裡我用的是直接用棧儲存了字尾式的表示式麻煩了,也可以直接輸出就可以這樣更簡單)
#include
#include
#include
#include
using namespace std;
char a[500005];
int main()
while(!s1.empty())
while(!s2.empty())
gets(a);
int sum = 0;
int len = strlen(a);
for(i = 0;i < len; i++)
else if(a[i] == '*'||a[i] == '/')
else if(a[i] == '*'||a[i] == '/')
s1.push(a[i]);}}
else if(a[i] == '+'||a[i] == '-')
else
s1.push(a[i]);}}
else if(a[i] == '(')
else if(a[i] == ')')
s1.pop();}}
while(!s1.empty())
while(!s.empty())
while(!s2.empty())
}**菜鳥,如有錯誤,請多包涵!!
歡迎點評,謝謝!
資料結構實驗之棧二 一般算術表示式轉換成字尾式
abc defg hb 資料結構實驗之棧二 一般算術表示式轉換成字尾式 time limit 1000msmemory limit 65536kb64bit io format lld llu submit status practice sdutoj 2132 description 對於乙個基於...
資料結構實驗之棧二 一般算術表示式轉換成字尾式
description 對於乙個基於二元運算子的算術表示式,轉換為對應的字尾式,並輸出之。input 輸入乙個算術表示式,以 字元作為結束標誌。output 輸出該表示式轉換所得到的字尾式。sample input a b c d e f sample output ab cde f include...
資料結構實驗之棧二 一般算術表示式轉換成字尾式
對於乙個基於二元運算子的算術表示式,轉換為對應的字尾式,並輸出之。輸入乙個算術表示式,以 字元作為結束標誌。輸出該表示式轉換所得到的字尾式。a b c d e f ab cde f 最近在看棧的內容,但對於這道題,沒有想法,看到網上的題解,才明白怎麼回事,思路就是,建立乙個棧,是數字就輸出,是運算子...