后序表示法的求值.PPT

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
后序表示法的求值

第四章 堆疊 4-1 認識堆疊 4-2 堆疊的應用 4-3 算術運算式的求值 4-4 中序法轉換為前序法 4-5 前序與後序式轉換成中序式 認識堆疊 談到所謂後進先出(Last In,Frist Out)的觀念,其實就如同自助餐中餐盤由桌面往上一個一個疊放,且取用時由最上面先拿,這就是一種典型堆疊概念的應用: 堆疊的工作運算 下列特性: 五種工作定義: 堆疊的陣列實作 堆疊本身可以使用靜態陣列結構或動態鍵結串列結構來實作,只要維持堆疊後進先出與從頂端讀取資料的兩個基本原則即可。 範例程式:ch04_01.java 範例程式:ch04_02.java 堆疊的串列實作 以陣列結構來製作堆疊的好處是製作與設計的演算法都相當簡單,但因為如果堆疊本身是變動的話,陣列大小並無法事先規劃宣告。 鍵結串列來製作堆疊的優點是隨時可以動態改變串列長度,不過缺點是設計時,演算法較為複雜。 範例程式:ch04_03.java 堆疊的應用 1.二元樹及森林的走訪運算,例如中序追蹤(Inorder)、前序追蹤 (Preorder)等。 2.電腦中央處理單元(CPU)的中斷處理(Interrupt Handling)。 3.圖形的深度優先(DFS)追蹤法。 4.某些所謂堆疊計算機(Stack Computer),是一種採用空位址(zero-address)指令。 5. 迴程式的呼叫及返回:在每次遞迴之前,須先將下一個指令的位址、及變數的值保存到堆疊中。 6. 算術式的轉換和求值,例如中序法轉換成後序法。 7. 呼叫副程式及返回處理,例如要執行呼叫的副程式前,必須先將返回位置儲存到堆疊中,然後才執行呼叫副程式的動作。 8. 編譯錯誤處理(Compiler Syntax Processing):例如當編輯程式發生錯誤或警告訊息時,會將所在的位址推入堆疊中,才顯示出錯誤相關的訊息對照表。 範例 4.2.1 考慮如下所示的鐵路交換網路 在圖右邊為編號1,2,3,…,n的火車廂。每一車廂被拖入堆疊,並可以在任何時候將它拖出。 如n=3,我們可以拖入1,拖入2,拖入3然後再將車廂拖出,此時可產生新的車廂順序3,2,1。請問 當n=3時,分別有那幾種排列的方式?那幾種排序方式不可能發生? 當n=6時,325641這樣的排列是否可能發生?或者154236?或者154623?又當n=5時,32154這樣的排列是否可能發生? 找出一個公式Sn,當有n節車廂時,共有幾種排方式? 河內塔問題 西元1883年法國數學家Lucas所提出流傳在印度的河內塔(Tower of Hanoil)遊戲,是典型使用遞迴式與堆疊觀念來解決的範例。 河內塔問題可以這樣形容: 不過在搬動時,尚須遵守以下遊戲規則: 由以上得知,依此類推n=5、6、7…,我們得到一個結論:當有n 個盤子時: [步驟1]將n-1個盤子,從木樁1移動到木樁2。 [步驟2]將第n個最大盤子,從木樁1移動到木樁3。 [步驟3]將n-1個盤子,從木樁2移動到木樁3。 這時假設an為移動n個盤子所需要的最少移動次數,且a1=1 從上圖中,可得知如下結果: 範例程式:ch04_04.java 迷宮問題 在迷宮中行進,必須遵守以下三個原則: 先來了解如何在電腦中表現一個模擬迷宮的方式。這時可以利用二維陣列MAZE[row][col],並符合以下規則: 模擬迷宮地圖 範例程式:ch04_05.java 八皇后問題 在西洋棋中的皇后可以在沒有限定一步走幾格的前題下,對棋盤中的其它棋子直吃、橫吃及對角斜吃(左斜吃或右斜吃皆可) 。 只要後放入的新皇后,放入前必須考慮所放位置直線方向、橫線方向或對角線方向是否已被放置舊皇后,否則就會被先放入的舊皇后吃掉。 可以將其應用在4*4的棋盤,就稱為4-皇后問題;應用在8*8的棋盤,就稱為8-皇后問題。 應用在N*N的棋盤,就稱為N-皇后問題。 4-皇后及8-皇后 底下分別是4-皇后及8-皇后在堆疊存放的內容及對應棋盤的其中一組解。 範例程式:ch04_06.java 算術運算式求值 一個算術運算式是由運算子(+、-、*、/..)與運算元(1、2、3…及間隔符號) 所組成。下式為一個典型算術運算式: 以上運算式表示法,稱為中序表示法(Infix Notation),這也是一般人所習慣的寫法。 運算過程需注意括號內的運算式先行處理,且需注意運算子優先權。 運算式種類 1.中序法(Infix) 例如2+3、3*5、8-2等等都是中序表示法。 2.前序法(Prefix) 例如中序運算式2+3,前序運算式的表示法則為+23,而2*3+4*5則為+*23*45 3.後序法(Postfix) 例如後序運算式2+3,後序運算式的表示法為23+,而2*3+4

文档评论(0)

fengruiling + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档