資料結構之中綴表示式轉字尾表示式

2021-10-05 13:22:29 字數 1282 閱讀 9350

中綴表示式轉字尾表示式的基本規則:

1.遇到運算元就直接輸出

2.遇到左括號就壓入棧中

3.遇到右括號就將棧中所有符號輸出且彈出(左括號只需要彈出不需要輸出)

4.遇到操作符就與棧頂元素進行對比

①當前操作符比棧頂操作符的優先順序大的話:

就直接將當前操作符壓入棧中

②當前操作符比棧頂操作符的優先順序小或者相等的話

就將棧頂操作符輸出且彈出,然後繼續判斷棧頂元素,直到棧空 或 遇到左括號

ps:因為 * /是最高的優先順序 所以除非棧頂是 * / 需要將棧頂得元素輸出 其他的都是將操作符直接壓入棧中,又因為 - +是最低的運算子 所以不論遇到什麼 都需要一直將棧頂元素輸出 直到不該輸出為止,然後再將當前操作符壓入棧

因為水平有限和第一次寫,難免出現錯誤,如果有麻煩指出謝謝。

以下是**:

#include

#include

#include

#include

#define n 100

using

namespace std;

typedef

struct stack stack,

*stackptr;

void

push

(stackptr s,

char elem)

void

pop(stackptr s,

char

*elem)

void

gettop

(stackptr s,

char

*elem)

void

print

(stackptr s)

cout << endl;

}int

main()

else

else

if(str[i]

==')')}

else

if(str[i]

=='*'

|| str[i]

=='/')}

push

(&s, str[i]);

//再把當前操作符壓入棧中

}else

push

(&s, str[i]);

//最後再將其壓入棧中}}

}print

(&s)

;//最後列印棧中剩餘的所有操作符

}

資料結構之中綴表示式轉字尾表示式

對於計算機來說,字尾表示式更方便計算,但是對於我們來說,中綴表示式更方便理解。為了大家都方便,下面就聊聊如何把乙個中綴表示式借助 轉化成乙個字尾表示式。在實現轉字尾表示式時,用棧結構儲存操作符,由於中間結構不用出棧,並且如果用棧結構儲存,那麼將出棧結果逆序才是我們要的字尾表示式,所以用list儲存即...

資料結構之中綴表示式轉字尾表示式

初始化兩個棧 運算子棧s1和儲存中間結果的棧s2 從左至右掃瞄中綴表示式 遇到運算元時,將其壓s2 遇到運算子時,比較其與s1棧頂運算子的優先順序 1.如果s1為空,或棧頂運算子為左括號 則直接將此運算子入棧 2.否則,若優先順序比棧頂運算子的高,也將運算子壓入s1 3.否則,將s1棧頂的運算子彈出...

資料結構棧之中綴表示式轉字尾

對於乙個中綴表示式,假設a b a b 我們對它從左至右進行遍歷,當遇到運算元時直接輸出 當遇到操作符且棧為空時,將操作符壓入棧 當遇到左括號時,將其入棧 當遇到右括號時,將棧中左括號上面的元素依次出棧並輸出,最後將左括號出棧 但不輸出 當遇到操作符時 此時棧非空 當棧頂元素也為操作符且優先順序大於...