sdut 2484 算術表示式的轉換

2021-08-22 06:11:31 字數 1471 閱讀 9511

time limit: 1000 ms memory limit: 65536 kib

submit

statistic

discuss

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

source

字首規律:

1)  設立操作符棧s,結果棧x;

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

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

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

**如下:

#include

#include

#include

#include

char s[100005];

void hou(char st, int l)

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

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

top--;

}else if(st[i] == '+' || st[i] == '-')

printf("%c", s[top--]);}}

else if(st[i] == '*' || st[i] == '/')

printf("%c", s[top--]);}}

else if(st[i] == '#')

break;

}for(;top > 0; top--)

printf("%c", s[top]);

}void zhong(char st, int l)

}void qian(char st, int l)

top--;

}else if(st[i] == '+' || st[i] == '-')

x[++j] = s[top--];}}

else if(st[i] == '*' || st[i] == '/')

}for(; top > 0; top--)

x[++j] = s[top];

for(i = j; i > 0; i--)

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

}int main()

SDUT2484 算術表示式的轉換

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

SDUT 2484 算術表示式的轉換

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

SDUT2484 算術表示式的轉換

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