外包工

学 JAVA 学 OO

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  21 随笔 :: 0 文章 :: 0 评论 :: 0 Trackbacks
1.堆疊應用:計算後序式(postfix)之四則運算

  當我們在計算四則運算時,所用的式子稱為中序式(infix)。中序式,是因為運算符號
  被夾在兩個運算數字的中間(如 1+2 或 3*4),但是當多筆數字及運算符號在同一個式
  子時,便會有運算符號優先順序的問題。請看下面兩個算式:

  1*2+3*4=14,答案是對的(依照先加減後乘除的順序計算)
  1*2+3*4=24,若依照先加減後乘除的順序,則答案是錯的,但反之則是對的。

  為了避免這種運算符號優先順序不同造成的困擾,當我們在計算時有時會加上括號
  明確的表明運算順序。(例: 1*(2+3)*4 )

  若利用程?茬B理四則運算的話,中序式雖然容易被人類判讀,但對程?茖市o會造
  成上述的困擾與麻煩,而用後序?茬B理則不必考慮運算符號順序的問題。

  後序式的規則是將兩運算數字排在前,運算符號排在最後。例:

  前序式  =>  後序式
  1*2         12*
  1*2+3*4     12*34*+
  1*(2+3)*4   123+*4*
  1+2*3+4     123*+4+

  利用堆疊來計算四則運算:
 
  (1)先將中序式:a*b+c*d 轉換成 後序式:ab*cd*+
  (2)
      由左至右掃描整個後序式,若遇到數字則放入堆疊;若遇到運算符號,則從堆疊內取
      出兩個數字作運算,再將結果放入堆疊。重覆處理到式子結束。

  (3)取出堆疊內的最後筆資料,即為結果。

  處理流程:

  postfix:        stack:         op:      comment: 

  ab*cd*+                                 原始算式 
  b*cd*+          a                       放入a至堆疊
  *cd*+           ab                      放入b
  cd*+            (a*b)           *       運算*,取出b,a 並將(a*b)結果放入堆疊
  d*+             (a*b)c                  放入c
  *+              (a*b)cd                 放入d
  +               (a*b)(c*d)      *       運算*,取出d,c 並將(c*d)結果放入堆疊
                  (a*b)+(c*d)     +       運算+,取出(c*d),(a*b)並將(a*b)+(c*d)放入堆疊


  故以程式計算四則運算的流程如後:
 
  中序式=>後序式=>運算處理

  (中序式轉換為後序式的作法因為需要較多篇幅,在此先省略。)
  
2.佇列應用:走迷宮

  走迷宮是一種考驗計憶力的遊戲。(not yet!)
posted on 2010-10-23 09:42 外包工 阅读(363) 评论(0)  编辑  收藏 所属分类: C语言程式设计

只有注册用户登录后才能发表评论。


网站导航: