5-3-1運算式的種類、計算與轉換.ppt

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

第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換 5-4 堆疊與遞迴的應用 - 走迷宮問題 5-5 再談遞迴的應用 - 河內塔問題 5-1 堆疊的基礎-說明 「堆疊」(Stacks)屬於一種擁有特定進出規則的線性串列結構,如同在餐廳廚房的工人清洗餐盤,將洗好的餐盤疊在一起,每一個洗好的餐盤放在這疊餐盤的頂端,如下圖所示: 5-1 堆疊的基礎-操作 堆疊的基本操作,如下所示: pop( ):從堆疊取出資料,每執行一次,就從頂端取出一個資料。 push( ):將資料存入堆疊,在堆疊的頂端新增資料。 isStackEmpty( ):檢查堆疊是否是空的,以便判斷是否還有資料可以取出。 5-1 堆疊的基礎-特性 堆疊的資料因為是從頂端一一存入,堆疊內容是依序執行push(1)、push(2)、push(3)、push(4)和push(5)的結果,接著從堆疊取出資料,依序執行pop()取出堆疊資料,如下所示: pop():5 pop():4 pop():3 pop():2 pop():1 取出的資料順序是5、4、3、2、1,可以看出其順序和存入時相反,稱為「先進後出」(Last Out, First In)的特性。總之,堆疊擁有的特性,如下所示: 只允許從堆疊的頂端存取資料。 資料存取的順序是先進後出(Last Out, First In),也就是後存入堆疊的資料,反而先行取出。 5-1 堆疊的基礎- C語言的函數呼叫(說明) C語言函數呼叫的執行過程就是使用作業系統的堆疊儲存目前的執行狀態,例如:C程式擁有主程式main()和a()和b()兩個函數,M1、M2、A1、A2和B分別代表程式區塊,程式的執行順序依序為:M1→A1→B→A2→M2。 5-1 堆疊的基礎- C語言的函數呼叫 當主程式main()呼叫和進入函數a(),main()的返回位址1存入堆疊, 接著進入函數b(),返回位址2被存入堆疊,執行完函數b()後,從堆疊取出返回位址2,繼續執行A2程式區塊,再繼續從堆疊取出返回位址1,繼續主程式的執行,如下圖所示: 5-1 堆疊的基礎- C語言的區域變數 C語言的全域變數是在編譯階段就配置記憶體空間,區域變數則是在執行階段進入函數後,才配置變數所需的記憶體空間,而且在結束函數執行後,就馬上釋放區域變數佔用的記憶體空間。 函數的參數也屬於一種區域變數,C語言函數呼叫在處理區域變數和參數時,就是將這些變數和參數的值都使用堆疊保留下來,其操作類似前述使用堆疊保留返回位址的方式,程式在呼叫函數前,將返回位址、各區域變數和參數都一一存入堆疊,等到返回後,再一一取出堆疊內容,恢復成函數呼叫前的執行狀態。 5-2 堆疊的表示法 5-2-1 使用陣列建立堆疊 5-2-2 使用鏈結串列建立堆疊 5-2-1 使用陣列建立堆疊-標頭檔 01: /* 程式範例: Ch5-2-1.h */ 02: #define MAXSTACK 100 03: int stack[MAXSTACK]; /* 堆疊的陣列宣告 */ 04: int top = -1; /* 堆疊的頂端 */ 05: /* 抽象資料型態的操作函數宣告 */ 06: extern int isStackEmpty(); 07: extern int push(int d); 08: extern int pop(); 5-2-1 使用陣列建立堆疊-存入元素(步驟) 因為堆疊的特性是只能從堆疊頂端存取資料,所以需要一個額外的top變數來指向堆疊頂端的陣列索引值,使用此索引值將資料存入堆疊。 push( )函數將資料存入堆疊的步驟,如下所示: Step 1:將堆疊頂端的指標top加1。 Step 2:將參數的資料存入指標top所指的陣列元素。 stack[++top] = d; 5-2-1 使用陣列建立堆疊-存入元素(圖例) 例如:依序將值1~6存入堆疊的圖例,如下圖所示: 5-2-1 使用陣列建立堆疊-取出元素(步驟) 從堆疊取出資料的是pop( )函數,取出資料的步驟,如下所示: Step 1:取出目前堆疊指標top所指的陣列值。 Step 2:將堆疊指標top的內容減1,即指向下一個堆疊元素。 return stack[top--]; 5-2-1 使用陣列建立堆疊-取出元素(圖例) 例如:在依序將值1~6存入堆疊後,從堆疊取出各元素的圖例,如下圖所示: 5-2-2 使用鏈結串列建立堆疊-標頭檔 01: /* 程式範例: Ch5-2-2.h */ 02: struct Node { /* 堆疊節點的宣告 */ 03: int data;

文档评论(0)

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

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

1亿VIP精品文档

相关文档