波蘭運算式和逆波蘭運算式(棧)

來源:互聯網
上載者:User

中綴運算式如1*2+(2-1), 其運算子一般出現在運算元之間, 因此稱為中綴運算式,也就是大家編程中寫的表達

式。編譯系統不考慮運算式的優先順序別, 只是對錶達式從左至右進行掃描, 當遇到運算子時, 就把其前面的兩

個運算元取出, 進行操作。為達到上述目的, 就要將中綴運算式進行改寫,變為尾碼運算式 如上面的運算式

1*2+(2-1), 就變為12*21-+;

尾碼運算式中不含有括弧, 且尾碼運算式的運算元和中綴運算式的運算元排列次序完全相同, 只是運算子的

次序發生了改變。我們實現的時候,只需要用一個特定工作方式的資料結構(棧),就可以實現。

其中stack op;用來存放運算子棧。數組ans用來存放尾碼運算式。

演算法思想:

從左至右掃描中綴運算式,是運算元就放進數組ans的末尾。

如果是運算子的話,分為下面3種情況:

1)如果是‘(’直接壓入op棧。

2)如果是‘)’,依次從op棧彈出運算子加到數組ans的末尾,知道遇到'(';

3) 如果是非括弧,比較掃描到的運算子,和op棧頂的運算子。如果掃描到的運算子優先順序高於棧頂運算子

則,把運算子壓入棧。否則的話,就依次把棧中運算子彈出加到數組ans的末尾,直到遇到優先順序低於掃描

到的運算子,並且把掃描到的運算子壓入棧中。

就這樣依次掃描,知道結束為止。

如果掃描結束,棧中還有元素,則依次彈出加到數組ans的末尾,就得到了尾碼運算式。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.