中綴運算式轉化為尾碼運算式

來源:互聯網
上載者:User

標籤:

尾碼運算式逆波蘭記法中,操作符置於運算元的後面。例如表達“三加四”時,寫作“3 4 +”,而不是“3 + 4”。如果有多個操作符,操作符置於第二個運算元的後面,所以常規中綴記法的“3 - 4 + 5”在逆波蘭記法中寫作“3 4 - 5 +”:先3減去4,再加上5。使用逆波蘭記法的一個好處是不需要使用括弧。例如中綴記法中“3 - 4 * 5”與“(3 - 4)*5”不相同,但尾碼記法中前者寫做“3 4 5 * -”,無歧義地表示“3 (4 5 *) ?”;後者寫做“3 4 - 5 *”。

來源: https://zh.wikipedia.org/wiki/%E9%80%86%E6%B3%A2%E5%85%B0%E8%A1%A8%E7%A4%BA%E6%B3%95
調度場演算法
  • 當還有記號可以讀取時
    • 讀取一個記號
      • 表示一個數字,添加到輸出隊列中
      • 表示一個函數,壓入棧中
      • 一個函數參數的分隔字元(,)
        • 從佔中不斷的彈出操作符,並且放入輸出隊列中去,知道棧頂部的元素為一個左括弧為止。
          • 如果一直沒有遇到左括弧
            • 分隔字元放錯了位置
            • 括弧不匹配
      • 一個操作符,記做O1
        • 只要存在另一個O2的操作符位於棧的頂端
          • 如果O1是左結合性的並且它的運算子優先順序要小於或等於O2的優先順序,或者如果O1是右結合性的並且它的運算子優先順序比O2的低,那麼O2從棧頂彈出並且放入輸出隊列中(迴圈直至以上條件不滿足為止,如果O1左結合性,直到遇上優先順序比O1低的,停止,如果O1右結合性,直到遇上優先順序比O1相等的或低的)
          • 然後,將O1壓入棧的頂端
      • 左括弧
        • 壓入棧中
      • 右括弧
        • 從棧當中不斷的彈出操作符並且放入輸出隊列中,直到彈出的元素為左括弧為止
        • 將左括弧從棧的頂部彈出,但並不放入輸出隊列中去
        • 如果在找到一個左括弧之前,棧就已經彈出了所有元素,那麼久表明在運算式中存在不匹配的括弧
  • 當再沒有記號可以讀取時
    • 如果在棧中還有操作符
      • 如果此時位於站頂端的操作符是一個括弧,那麼就表示在運算式中存在不匹配的括弧
      • 將操作符逐個彈出並放入輸出隊列中去
  • 退出演算法

尾碼運算式(逆波蘭)求值一般是基於堆棧的,演算法一般這樣描述
運算元入棧,遇到操作符時,運算元出棧,求值,將結果入棧;如此重複。
虛擬碼
  • while有輸入符號
    • 讀入下一個符號x
    • IF X是一個運算元
      • 入棧
    • ELSE IF X是一個操作符
      • 有一個先驗的表格給出該操作符需要n個參數
      • IF堆棧少於n個運算元
        • (錯誤)使用者沒有輸入足夠的運算元
      • ELSE,n個運算元出棧
      • 計算操作符
      • 將計算所得的值入棧
    • IF 棧內只有一個值
      • 這個值就是整個計算式的結果
    • ELSE 多餘一個值
      • (錯誤)使用者輸入了多餘的運算元


實際實現過程中出現的問題字串如何切割成一個字元
  1. for(int i; i <expss.lengh();i++)
  2.     visit(new Character(s.charAt(2)).toString());

判斷字串是否數字http://javapub.iteye.com/blog/666544
equals的使用java的參考型別

需要加入Regex
  1. public static boolean isInteger(String str) {
  2. Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
  3. return pattern.matcher(str).matches();
  4. }
匹配空格\s字串轉化為數字
靜態成員初始化中間會拋出兩次除法注意除數和被除數還差小數沒調整好




中綴運算式轉化為尾碼運算式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.