算術表示式的轉換

2021-07-15 22:50:53 字數 1606 閱讀 4136

time limit: 1000ms memory limit: 65536k

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

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

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

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

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

+*ab*-c/def

a*b+c-d/e*f

ab*cde/-f*+

很想吐槽一下做這個題的艱辛,起碼提交了十幾次。我覺著這個題的難處在於求字首和字尾式的時候,優先順序的處理的區別。求字首式時,當前運算子優先順序大於等於棧頂元素,當前運算子即入棧;而求字尾式時,當前運算子優先順序要大於棧頂元素才能入棧!

#include#include#include#include#define maxsize 1000

int count;

typedef char elemtype;

typedef struct

qstack;

//初始化棧

int initstack(qstack &s)

//進棧和查詢(字尾式)

int pacstack(qstack &s,char e)

else//不為字元時

else if(e==')')//為右括號

s.top--;

}else if(e=='+'||e=='-')//為加減

else

*(++s.top)=e;}}

else if(e=='*'||e=='/')//為乘除

*(++s.top)=e;

}else

}else if(e=='#')//為『#』}}

}//進棧和查詢(字首式)

void fpacstack(qstack &s1,qstack &s2,char e)

}else//未結束時

else if((e>='a'&&e<='z')||(e>='a'&&e<='z')||(e>='0'&&e<='9'))//為字元時

else if(e==')')//為右括號進棧

else if(e=='(')//為左括號

s2.top=s2.top-1;

}else if(e=='+'||e=='-')//為加減

else if(*(s2.top)=='*'||*(s2.top)=='/')

*(++s2.top)=e;}}

else if(e=='*'||e=='/')//為乘除

}}//出棧

void putstack(qstack &s)

}int main()

}count=j;

for(i=j;i>=0;i--)//求字首式

fpacstack(s1,s2,p);

putstack(s1);

printf("\n");

for(i=0;i

算術表示式的轉換

小明在學習了資料結構之後,突然想起了以前沒有解決的算術表示式轉化成字尾式的問題,今天他想解決一下。因為有了資料結構的基礎小明很快就解出了這個問題,但是他突然想到怎麼求出算術表示式的字首式和中綴式呢?小明很困惑。聰明的你幫他解決吧。輸入 輸入一算術表示式,以 字元作為結束標誌。資料保證無空格,只有一組...

算術表示式的轉換

time limit 1000ms memory limit 65536k 小明在學習了資料結構之後,突然想起了以前沒有解決的算術表示式轉化成字尾式的問題,今天他想解決一下。因為有了資料結構的基礎小明很快就解出了這個問題,但是他突然想到怎麼求出算術表示式的字首式和中綴式呢?小明很困惑。聰明的你幫他解...

算術表示式的轉換

這道題卡了好久,從網上找的 但不是用棧做的,儲存起來當演算法看吧。time limit 1000ms memory limit 65536k 小明在學習了資料結構之後,突然想起了以前沒有解決的算術表示式轉化成字尾式的問題,今天他想解決一下。因為有了資料結構的基礎小明很快就解出了這個問題,但是他突然想...