sdut 2484 算術表示式的轉換

2022-09-03 02:24:10 字數 1495 閱讀 5285

problem description

小明在學習了資料結構之後,突然想起了以前沒有解決的算術表示式轉化成字尾式的問題,今天他想解決一下。

因為有了資料結構的基礎小明很快就解出了這個問題,但是他突然想到怎麼求出算術表示式的字首式和中綴式呢?小明很困惑。聰明的你幫他解決吧。

input

輸入一算術表示式,以\'#\'字元作為結束標誌。(資料保證無空格,只有一組輸入)

output

輸出該表示式轉換所得到的字首式 中綴式 字尾式。分三行輸出,順序是字首式 中綴式 字尾式。

sample input

a*b+(c-d/e)*f#

sample output

+*ab*-c/def

a*b+c-d/e*f

ab*cde/-f*+

hint

#include using

namespace

std;

stack

st2,st1;

intmain()

else

if(st2.top()=='

+'||st2.top()=='-'

)st2.push(s[i]);

}else

if(s[i]==')'

)st2.push(s[i]);

else

if(s[i]=='('

)

if(!st2.empty()&&st2.top()==')'

)st2.pop();}}

while(!st2.empty())

while(!st1.empty())

cout

中序遍歷把括號去掉即可

*/for(i=0; s[i]!='

#'; i++)

cout

後續遍歷為若是字母則輸出,當為運算子或括號時:

若棧st2空或左括號時進棧,當不為空時,

若當前運算子優先順序大於棧頂元素就進棧;

否則將棧頂元素出棧,並把當前元素入棧,

最後輸出棧內剩餘元素

*/while(!st2.empty())st2.pop();

for(i=0; s[i]!='

#'; i++)

else

if(s[i]=='

+'||s[i]=='-'

)

}else

if(s[i]=='('

)st2.push(s[i]);

else

if(s[i]==')'

)

if(!st2.empty()&&st2.top()=='('

)st2.pop();}}

while(!st2.empty())

cout

}

SDUT2484 算術表示式的轉換

這是乙個將中綴式轉化成表示式樹然後在遍歷輸出的題 操作總結為 1 把中綴式轉換為字尾式。2 把字尾式轉化為表示式樹。3 將表示式樹先序 中序 後序遍歷得出字首式 中綴式 字尾式。以下是 include include struct node char sa 100 sb 100 sc 100 int...

SDUT 2484 算術表示式的轉換

算術表示式的轉換time limit 1000ms memory limit 65536k 有疑問?點這裡 題目描述 小明在學習了資料結構之後,突然想起了以前沒有解決的算術表示式轉化成字尾式的問題,今天他想解決一下。因為有了資料結構的基礎小明很快就解出了這個問題,但是他突然想到怎麼求出算術表示式的字...

sdut 2484 算術表示式的轉換

time limit 1000 ms memory limit 65536 kib submit statistic discuss problem description 小明在學習了資料結構之後,突然想起了以前沒有解決的算術表示式轉化成字尾式的問題,今天他想解決一下。因為有了資料結構的基礎小明很...