面試題:中序表達式如何轉爲前序表達式和後序表達式

中序表達式轉爲前序表達式和後序表達式


題目:將中序表達式轉換爲前綴表達式和後綴表達式,例如:
(a+b)c(d-e/f) 轉換成前綴表達式是:*-/fed*c+ba ,轉換爲後綴表達式是:ab+c*def/- *

輸入:(a+b)c(d-e/f)

輸出:前綴:*-/fed*c+ba,後綴表達式是:ab+c*def/- *

後綴表達式的轉換規則:
1.遇到操作數:直接輸出(添加到後綴表達式中)
2.棧爲空時,遇到運算符,直接入棧
3.遇到左括號:將其入棧
4.遇到右括號:執行出棧操作,並將出棧的元素輸出,直到彈出棧的是左括號,括號不輸出。
5.遇到其他運算符:加減乘除:彈出所有優先級大於或者等於該運算符的棧頂元素,然後將該運算符入棧
6.最終將棧中的元素依次出棧,輸出。

而前綴表達式的轉換規則爲:與中綴轉後綴不同,中綴表達式轉後綴表達式是從右到左順序讀取每一個字符,然後進行反轉字符串。
還有一個比較重要的問題:就是在中綴表達式轉換爲後綴表達式時,在某個運算符進棧的時候,會彈出優先級大於等於該運算符的棧頂元素;
而在中綴表達式轉換爲前綴表達式時,會彈出優先級大於該運算符的棧頂元素。並且括號的順序也會返一下

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章