棧的應用-四則運算表達式

後綴(逆波蘭)表示法定義:全部的符號都是在要運算數字的後面出現。spa

中綴表達式:a+b*c+(d*e+f)/g遍歷

後綴表達式:abc*+de*f+g/+di

示例:2+3*2+(2*3+4)/2 = 13數字

232*+23*4+2/+ = 13運算符

後綴表達式的運算:ab

  1.掃描後綴表達式: 
    ①若是是數字,則讓其進棧 
    ②若爲操做符,則從棧中取出兩個操做數,先取出的做爲右操做數,後取出的做爲左操做數,而後進行該操做符的運算,並使其結果入棧。 
    ③重複上述過程,直至表達式掃描完成。 
  2.最終棧中只留一個元素—–>即就是結果。

中綴表達式轉化成後綴表達式:

1.遇到操做數,直接輸出;

2.棧爲空時,遇到運算符,入棧;

3.遇到左括號,將其入棧;

4.遇到右括號,執行出棧操做,並將出棧的元素輸出,直到彈出棧的是左括號,左括號不輸出;

5.遇到其餘運算符「+」、「-」、「*」、「÷」時,彈出全部優先級大於或等於該運算符的棧頂元素,而後將該運算符入棧;

6.最終將棧中的元素依次出棧,輸出。 

示例:

例如將 9 + (3 - 1) X 3 + 10 / 2 轉換成後綴表達式,過程以下:   一、9是數字,輸出,表達式爲:9;   二、「 + 」進棧,「 ( 」進棧,棧內容爲:+ (;   三、數字3輸出,表達式爲:9 3;   四、「 - 」進棧,棧內容爲:+ ( -;   五、數字1輸出,表達式爲:9 3 1;   六、遇到「 ) 」,根據規則,棧中符號出棧直到「 ( 」出棧爲止,此間遇到「 - 」須要輸出,所以表達式爲:9 3 1 -,棧中內容爲:+;   七、遇到「 X 」,因爲它的優先級比棧頂元素「 + 」高,所以它進棧,棧中內容爲:+ X;   八、遇到數字3輸出,表達式爲:9 3 1 - 3;   九、以後是「 + 」,優先級比棧頂的「 X 」低,「 X 」出棧輸出,「 + 」變成棧頂,棧頂的「 + 」優先級並不大於外面的「 + 」,所以也須要出棧輸出,此時棧爲空了,那麼表達式爲:9 3 1 - 3 X +,同時外面的「 + 」進棧,棧中內容爲:+;   十、遇到10輸出,表達式爲:9 3 1 - 3 X + 10;   十一、遇到符號「 / 」,優先級比棧頂元素「 + 」高,進棧,棧中內容爲:+ /;   十二、數字2輸出,表達式爲:9 3 1 - 3 X + 10 2;   1三、遍歷結束,棧不爲空,棧中符號依次出棧輸出,最後表達式爲:9 3 1 - 3 X + 10 2 / +。
相關文章
相關標籤/搜索