算術表示式的轉換

2021-07-16 13:03:08 字數 2414 閱讀 3177

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

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

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

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

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

+*ab*-c/def

a*b+c-d/e*f

ab*cde/-f*+

字首規律:

1)  設立操作符棧optr,結果棧result;

2) 從右向左遍歷,若當前字元是運算元,則直接傳送給result棧;

3)  若當前運算子的優先數高於等於棧頂運算子,則進optr棧;

4)  否則,退出棧頂運算子傳送給result棧;

5)   「)」 對它之前後的運算子起隔離作用,「(」可視為自相應右括弧開始的表示式的結束符。(即讀到右括號時總是將它壓入optr棧中,讀到左括號時,將靠近棧頂的第乙個右括號上面的運算子全部依次彈出,送至result棧後,再丟棄右括號。 )

字尾規律:

1)  設立操作符棧;

2) 若當前字元是運算元,則直接傳送給字尾式;

3)  若當前運算子的優先數高於棧頂運算子,則進棧;

4)  否則,退出棧頂運算子傳送給字尾式;

5)   「(」 對它之前後的運算子起隔離作用,「)」可視為自相應左括弧開始的表示式的結束符。(即讀到左括號時總是將它壓入棧中,讀到右括號時,將靠近棧頂的第乙個左括號上面的運算子全部依次彈出,送至輸出佇列後,再丟棄左括號。 )

#include

#include

#include

#include

#include

#include

using namespace std;

int cmp(char c)//運算子的優先順序;

void qianzhui(char a)//字首式的獲得;陣列模擬棧;

else

else if(a[i] == '(')

top2--;

}else

else}}

}while(top2 != -1)//將陣列stack2的所有元素挪進stack3;

for(int i = top3; i >= 0; i--)//逆序輸出陣列的所有元素;

printf("%c", stack3[i]);

printf("\n");

}void zhongzhui(char a)//中綴式的獲得;

printf("\n");

}void houzhui(char a)//字尾式的獲得;

else

else if(cmp(a[i]) > cmp(stack1[top1]))//優先運算的比較;

top1-- ;

}else

}else

else}}

}while(top1 != 0)//陣列所有元素的輸出;

printf("\n") ;

}int main()

#include

#include

#include

#define stackmax 10000

#define stacknum 10000

typedef int elemtype;

typedef struct

sqstack;

int initstack(sqstack &s)//棧的初始化;

char push(sqstack &s, char e)//進棧;

*s.top++=e;

}int pop(sqstack &s)//出棧;

char gettop(sqstack &s)//獲得棧頂元素;

int stackempty(sqstack &s)//判斷棧是否為空;

int cmp(char c)//用於比較優先順序

char lasttranslate(sqstack &s, char c)//字尾式的獲得;

else

pop(s);

}else

}else}}

}}}}

char pretranslate(sqstack &s1, sqstack &s2, char c)//字首式的獲得;

else

pop(s2);

}else

}else}}

}}void putstack1(sqstack &s)//棧內所有元素的輸出;

}void putstack2(sqstack &s)

}char midtranlate(char c)//中綴式的獲得;

算術表示式的轉換

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

算術表示式的轉換

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

算術表示式的轉換

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