回覆列表
  • 1 # 使用者2902059504229

    a*b*c → **abc a*b*c+c*d → +**abc*cd (a+b)*((c-d)*e+f) → *+ab+*-cdef 上面是波蘭式,逆波蘭式如下: a*b*c → ab*c* a*b*c+c*d → ab*c*cd*+ (a+b)*((c-d)*e+f) → ab+cd-e*f+* 寫出(a+b)*((c-d)*e+f)轉換時棧的變化情況:【注意,右端為棧頂】 讀入(,入棧,棧中為(,輸出:(空); 讀入a,直接輸出,棧中為(,輸出:a; 讀入+,入棧,棧中為(+,輸出:a; 讀入b,直接輸出,棧中為(+,輸出:ab; 讀入),依次推出棧中的符號,直到遇見一個(【注意括號不輸出】,棧中為空,輸出:ab+; 讀入*,入棧,棧中為*,輸出:ab+; 讀入(,入棧,棧中為*(,輸出:ab+; 讀入(,入棧,棧中為*((,輸出:ab+; 讀入c,直接輸出,棧中為*((,輸出:ab+c; 讀入-,入棧,棧中為*((-,輸出:ab+c; 讀入d,直接輸出,棧中為*((-,輸出:ab+cd; 讀入),依次推出棧中的符號,直到遇見一個(【注意括號不輸出】,棧中為*(,輸出:ab+cd-; 讀入*,入棧,棧中為*(*,輸出:ab+cd-; 讀入e,直接輸出,棧中為*(*,輸出:ab+cd-e; 讀入+,【由於此時棧中的*的優先順序高於+,所以先將*退棧,然後+入棧】,棧中為*(+,輸出:ab+cd-e*; 讀入f,直接輸出,棧中為*(+,輸出:ab+cd-e*f; 讀入),依次推出棧中的符號,直到遇見一個(【注意括號不輸出】,棧中為*,輸出:ab+cd-e*f+; 此時讀入已經完畢,棧中還剩一個*,輸出:ab+cd-e*f+* 完畢! 以上就是整個從中綴表示式到字尾表示式的過程,棧的變化情況已經都寫出來了。

  • 中秋節和大豐收的關聯?
  • 火車票能改簽提前走嗎?