电竞比分网-中国电竞赛事及体育赛事平台

分享

“四則運算”算法

 quasiceo 2017-10-30

四、“四則運算”算法基礎(chǔ)知識

數(shù)學(xué)意義上,加減乘除運算被稱為“四則運算”,如1+2*3-4,“四則運算”算法主要分兩步:第一步是中綴表達式轉(zhuǎn)后綴表達式,第二步是計算后綴表達式得到結(jié)果。

4.1 基本概念介紹

4.1.1 中綴表達式與后綴表達式

一般情況下,四則運算的表達式為中綴表達式,比如表達式 A+(B-C/D)*E,該表達式的中綴表達式與后綴表達式如下:

  • 中綴表達式:A+(B-C/D)*E
  • 后綴表達式:ABCD/-E*+

中綴表達式操作符置于兩個操作數(shù);后綴表達式操作符置于兩個操作數(shù)之;另外,后綴表達式已經(jīng)去除括號,并且定義了運算的先后順序,稍后我們來分析。

4.1.2 操作符與操作數(shù)

中后綴表達式中的字符有操作數(shù)和操作符之分:

  • 操作符:表達式中的 +-*/()(稍后運算用到的#符號也是)
  • 操作數(shù):表達式中的 ABCDE

也就是說,我們將加(+)、減(-)、乘(*)、除(/)、和括號("()")稱作操作符,將運算的字符A、B、C、D、E稱作操作數(shù)

4.1.3 棧、隊列與操作符優(yōu)先級

將中綴表達式轉(zhuǎn)為后綴表達式,需要

  • 一個操作符棧 —— 后進先出 LIFO
  • 一個字符隊列 —— 先進先出 FIFO
  • 定義操作符優(yōu)先級

其中,操作符棧 存儲操作符,并對操作符進行入棧出棧操作;字符隊列存儲轉(zhuǎn)換前后的表達式;操作符優(yōu)先級定義了棧內(nèi)以及棧外各個操作符的優(yōu)先級。

操作符優(yōu)先級規(guī)則如下:

  • * / 優(yōu)先級相同,+ - 優(yōu)先級相同
  • 優(yōu)先級: * / > + -
  • 同一優(yōu)先級(比如 + - ):先進棧 < 后進棧;
  • 井號 # 優(yōu)先級最低
  • 在棧外,左括號 ( 優(yōu)先級最高;在棧內(nèi),( 優(yōu)先級除井號 # 外最低
  • 總的來說,在棧外 ( > * / > + - > ) > '#';在棧內(nèi) * / > + - > ) > ( > #

計算后綴表達式,需要

  • 一個操作數(shù)棧 —— 后進先出 LIFO
  • 一個字符隊列 —— 先進先出 FIFO

4.2 中綴表達式轉(zhuǎn)后綴表達式的過程

4.2.1 轉(zhuǎn)換過程流程圖


圖18:中綴表達式轉(zhuǎn)后綴表達式過程

主要的過程為:

  • 循環(huán)讀取表達式字符隊列的字符
    • 如果是操作數(shù)
      • 直接入隊列
    • 如果是操作符
      • 如果是 ")" 操作符
        • 棧頂元素出棧,入隊列,直到遇到第一個 “(”
        • 如果還沒讀取到 ”(“,就已經(jīng)讀到了 "#",說明表達式左括號和右括號不匹配
      • 否則,如果是 “(” 操作符
        • 直接入棧
      • 否則,比較指針讀取的當(dāng)前操作符,與棧頂操作符的優(yōu)先級
        • 如果當(dāng)前元素 <= 棧頂元素
          • 棧頂元素出棧,入隊列
          • 直到遇到優(yōu)先級 > 當(dāng)前元素的棧頂單詞,或者遇到“#”,當(dāng)前元素入棧
        • 否則,(當(dāng)前元素優(yōu)先級 > 棧頂元素)當(dāng)前元素入棧
    • 當(dāng)隊列讀取到末尾,棧中所有元素依次出棧,并入隊列(#也入隊列)

4.2.2 轉(zhuǎn)換過程詳細(xì)示例

表達式 A+(B-C/D)*E 中綴轉(zhuǎn)后綴流程參見如下 PPT 演示:中綴轉(zhuǎn)后綴流程

4.3 計算后綴表達式過程

4.3.1 計算過程流程圖


圖19:計算過程流程圖

主要的過程為:

  • 循環(huán)讀取表達式字符隊列的字符
    • 如果是操作數(shù)(不是操作符)
      • 直接入棧
    • 否則是操作符
      • 棧頂彈出兩個操作符,做四則運算,結(jié)果重新入棧
    • 如果遇到隊列尾,結(jié)束

4.3.2 計算過程示例

表達式 ABCD/-E*+ 計算后綴表達式流程參見如下 PPT 演示:計算后綴表達式流程

4.4 簡單示例

下面演示一個簡單的示例,演示通過中綴表達式轉(zhuǎn)后綴表達式,并計算后綴表達式來計算 1+(3-4/2)*5 的過程:

表達式 1+(3-4/2)*5 中綴轉(zhuǎn)后綴流程參見如下 PPT 演示:中綴轉(zhuǎn)后綴示例

表達式 1342/-5*+ 計算后綴表達式流程參見如下 PPT 演示:計算后綴表達式示例

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多