堆疊 Stack chapter 4 德明科技大學資訊科技系.

Slides:



Advertisements
Similar presentations
第十一课 公正处理民事关系. 听歌曲《我想有个家》,阅读结婚誓词,回答 : 如何才能拥有一个幸福、温馨的家庭? 导 入 导 入 探究活动一:幸福、温馨家庭的讨论 亲情和爱情的精心维护 法律的有力保护 品味 与 感悟 家庭是父亲 的王国,母 亲的世界, 儿童的乐园 。 —— 爱默生.
Advertisements

教务处 年夏季大学英语等级考试 六级监考注意事项. 教务处 2 (一)本次考试基本情况 科目人数考场数 英语六级
首页 全国高等学校招生考试统一考试 监考员培训 广州市招生考试委员会办公室.
人口增长.
第三章 蒙太奇与长镜头 20世纪20年代,前苏联电影理论家谢尔盖·爱森斯坦以感性思维和理性思维的辩证法为依据,提出了系统研究电影特性的美学理论和实践原则,即蒙太奇理论,这一理论后来也泛指有关剪辑和分镜头的理论。 爱森斯坦之外,库里肖夫、普多夫金、维尔托夫等人对蒙太奇理论做出了重要贡献。前苏联蒙太奇学说体系中,以爱森斯坦的“冲突论”和普多夫金的“组合论”最具纲领性。
诚信为本、操守为重、坚持准则、不做假账 第 九 章 会 计 报 表.
第一章 专利的种类 一、发明专利 20年 二、实用新型专利 10年 三、外观设计专利 10年
2 016 陕西广播电视台 餐饮娱乐行业广播投放方案 【第一版】.
第一章 会计法律制度 补充要点.
二、个性教育.
2011年10月31日是一个令人警醒的日子,世界在10月31日迎来第70亿人口。当日凌晨,成为象征性的全球第70亿名成员之一的婴儿在菲律宾降生。 ?
江苏省2008年普通高校 招生录取办法 常熟理工学院学生处
请说出牛顿第一定律的内容。.
销售业务知识.
财经法规与会计职业道德 (7) 四川财经职业学院.
新准则框架与首次执行 企业会计准则 主讲人:陈清宇.
初级会计实务 第八章 产品成本核算 主讲人:杨菠.
问题解决与创造思维 刘 国 权 吉林省高等学校师资培训中心.
班級:行流四甲 組員:497D0004何筱瑩 497D0016鄧宜欣 497D0044呂亭儀 497D0056黃 琪 497D0063賴依淩
中考阅读 复习备考交流 西安铁一中分校 向连吾.
第四单元 自觉依法律己 避免违法犯罪.
财经法规与会计职业道德 (3) 四川财经职业学院.
中央广播电视大学开放教育 成本会计(补修)期末复习
人教版义务教育课程标准实验教科书 小学数学四年级上册第七单元《数学广角》 合理安排时间 248.
第十九课 南吕•一枝花 不 伏 老 关汉卿.
第三节 细胞外被与细胞外基质 1、胶原 细胞外被(糖萼)指细胞外覆盖的一层粘多糖(糖蛋白或糖脂)
面向海洋的开放地区——珠江三角洲 山东省高青县实验中学:郑宝田.
网络信息资源的开发与设计 主讲教师 罗双兰 广西师范大学教育科学学院.
《7.1 力》说课稿 丰城中学 杨青青.
线索一 线索二 复习线索 专题五 线索三 模块二 第二部分 考点一 高考考点 考点二 考点三 配套课时检测.
5.3.1 平行线的性质.
第四课时 常见天气系统 阜宁一中 姚亚林.
中考语文积累 永宁县教研室 步正军 2015.9.
存货的核算 一、项目任务 1、原材料核算 ——按实际成本核算 ——按计划成本核算 2、低值易耗品及包装物核算 3、存货清查的核算
小学数学知识讲座 应用题.
倒装句之其他句式.
第四章 计算科学教学计划与课程体系 4.1 计算科学(专业)的培养规格和目标
旅游服务与管理专业 知识点7 道教教主老子圣迹 任务三 道 教 主题二 中国四大宗教 辉县市职业中等专业学校 辉县市职业中等专业学校
第 22 课 孙中山的民主追求 1 .近代变法救国主张的失败教训: “师夷之长技以制 夷”“中体西用”、兴办洋务、变法维新等的失败,使孙中山
第三章 堆疊與佇列的基本應用 3-1 簡介堆疊(Stack) 3-2 迷宮問題研究 3-3 佇列(queue)的介紹
佇列與推疊 (Queue and Stack)
資料結構簡介.
Chap 3 堆疊與佇列 Stack and Queue.
第十五章 Linked List, Stack and Queue
4 堆疊與佇列 4.1 前言 四種基本的資料結構 (可儲存資料的容器) 陣列 (Array)、串列(List): 最基本
线性表小结 元素之间的线性关系 顺序表 顺序表:元素相邻存储 单链表:后继指针链接 一维数组 给定下标随机存取
cn/~dongeliu/dsa.html 刘 东 信息学院6系 中国科学技术大学
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
資料結構與C++程式設計進階 堆疊與佇列(Stack & Queue) 講師:林業峻 CSIE, NTU 6/ 21, 2010.
資料結構 第4章 堆疊.
第四章 堆疊與佇列 課前指引 資料結構學科中,堆疊(Stack)與佇列是兩種相當典型的抽象資料型態,也是一種有特定進出規則的線性串列應用,主要特性是限制了資料插入與刪除的位置和方法。本章中將會介紹堆疊與佇列的概念與特性,及在計算機領域的各種相關應用。
樹 2 Michael Tsai 2013/3/26.
常宝宝 北京大学计算机科学与技术系 数据结构(三) 常宝宝 北京大学计算机科学与技术系
知识点二 国际环境法的实施.
Chap2 Stack & Queue.
第四章 栈和队列 栈 ( Stack ) 队列 ( Queue ) 优先队列 (Priority Queue) 小结.
基础会计.
第 六 讲 栈和队列(一).
第八节 算术运算符和算术表达式.
1.理解力和运动的关系,知道物体的运动不需要力来维持。
第十二章 位运算.
坚持,努力,机会留给有准备的人 第一章 四大金融资产总结 主讲老师:陈嫣.
美丽的旋转.
10.3 水平面上的方位角.
第二十七章 相 似 27.3 位 似 第2课时 平面直角坐标系中的位似.
畢氏定理(百牛大祭)的故事 張美玲 製作 資料來源:探索數學的故事(凡異出版社).
摘要簡報 作品名稱:魔鬼記憶問答 作者:台中市西屯區永安國民小學 葉政德老師、王素珍老師.
13-1 電腦可以協助解決哪些問題 13-2 電腦解題簡介 13-3 電腦解題規劃-演算法 13-4 認識資料結構
102年人事預算編列說明 邁向頂尖大學辦公室製作.
Presentation transcript:

堆疊 Stack chapter 4 德明科技大學資訊科技系

堆疊 Stack 堆疊的定義 後進先出 last in first out (LIFO) p4-2 在一有序串列(ordered list)中,資料的新增與刪除都由同一端進行 後進先出 last in first out (LIFO) 德明科技大學資訊科技系

堆疊主要的動作 Push:將新項目加在堆疊的頂端 Pop:從堆疊頂端拿走一個項目 TopItem:讀出堆疊頂端的項目 輸入新資料進入堆疊 Pop:從堆疊頂端拿走一個項目 由堆疊輸出一個資料 TopItem:讀出堆疊頂端的項目 只是讀取,資料項目並不會減少 IsEmpty:看堆疊是否為空 空則傳回true,不空則傳回false。 IsFull:看堆疊是否已滿 滿則傳回true,未滿則傳回false 德明科技大學資訊科技系

p4-3 Push 與 Pop 德明科技大學資訊科技系

p4-4 德明科技大學資訊科技系

Push [4] [3] Push(A) Push(B) Push(C) [2] C [1] B B [0] A A A Top= -1 E E D D D Push(D) Push(E) Push(F) C C C B B B A A A Top= 3 Top= 4 Top= 4 Push失敗 德明科技大學資訊科技系

Pop [4] [3] Pop( ) Pop( ) Pop( ) [2] [1] B [0] A A Top= 1 Top= 0 德明科技大學資訊科技系

堆疊的應用 符合後進先出(LIFO)需求的特性 副程式(函數)呼叫的變數處理 運算式的轉換與求值 圖形的深度優先搜尋 每次呼叫副程式時,將現在的變數資訊放入系統的stack內 可以處理巢狀的函數呼叫,但是變數仍不會混亂 函數呼叫、遞迴呼叫、中斷處理、巨集呼叫等 運算式的轉換與求值 圖形的深度優先搜尋 資料反序輸出(例如: abc -> cba) 德明科技大學資訊科技系

函數呼叫處理 p4-5 德明科技大學資訊科技系

德明科技大學資訊科技系

函數呼叫 1. main() 2.{ 3. int i, j ; 4. printf(“main before calling f1\n”); 5. f1(); 6. printf(“main returns from f1\n”); 7. } 1.void f1() { 3. int m, n ; 4. m = 2 ; 5. printf(“f1 before calling f2\n”); 6. f2(m); 7. printf(“f1 returns from f2\n”); 8. } 1.void f2( int k ) 2.{ 3. printf(“f2 no more calling \n”); 4. k++ ; 5.} main f1 f2 5 6 6 7 德明科技大學資訊科技系

函數呼叫 遞迴呼叫呢?? 1. main() 2.{ 3. int i, j ; 4. printf(“main before calling f1\n”); 5. f1(); 6. printf(“main returns from f1\n”); 7. } 1.void f1() { 3. int m, n ; 4. m = 2 ; 5. printf(“f1 before calling f2\n”); 6. f2(m); 7. printf(“f1 returns from f2\n”); 8. } 1.void f2( int k ) 2.{ 3. printf(“f2 no more calling \n”); 4. k++ ; 5.} push pop push pop f1: m, n; (7) Top main: i, j; (6) main: i, j; (6) Top 遞迴呼叫呢?? 德明科技大學資訊科技系

以陣列來製作堆疊 產生堆疊結構: 製作堆疊最常用的方法就是利用一維陣列 宣告一個陣列結構。 p4-9 製作堆疊最常用的方法就是利用一維陣列 產生堆疊結構: 宣告一個陣列結構。 方法:Create(Stack) //建立一個空的Stack 製作:利用C語言 德明科技大學資訊科技系

將資料放入堆疊(Push動作) 將資料(item)插入到Stack中,並且成為Top頂端元素;如果堆疊已滿,則無法進行。 德明科技大學資訊科技系

取出資料(Pop動作) 刪除Stack的Top頂端元素,如果堆疊是空,則無法進行 方法:Pop(item,Stack) 德明科技大學資訊科技系

在空的Stack中連續加入A,B,C,D 4個資料項 德明科技大學資訊科技系

傳回堆疊Top頂端元素 傳回Stack的Top頂端元素,如果堆疊是空,則無法進行 方法:TopItem(Stack) 德明科技大學資訊科技系

判斷堆疊是否已滿 判斷Stack是否已滿(Top指標是否等於N-1),若是則傳回True,否則傳回False 方法:IsFull(Stack) 德明科技大學資訊科技系

判斷堆疊是否是空的 判斷Stack是否是空(亦即Top值為-1),若是則傳回True,否則傳回False。 方法:IsEmpty(Stack) 德明科技大學資訊科技系

運算式的表示法 X = A + B * C – ( D + E / F ) 運算式根據運算子的位置可以分為三種: 運算元 X = A + B * C – ( D + E / F ) 等號右邊是算術運算式 運算子 運算式根據運算子的位置可以分為三種: 1.   中序式 ( infix ):運算子在運算元的中間,例如 : A + B 2.   後序式 ( postfix ):運算子在運算元的後面,例如 : A B + 3.   前序式 ( prefix ):運算子在運算元的前面,例如 : + A B 為甚麼需要後序或前序?? 德明科技大學資訊科技系

中序式→前序式 中序式為 A×B+C×D 欲轉換成前序式,步驟如下: 1.先用括號將優先順序分出來 ((A×B)+(C×D)) p4-17 中序式為 A×B+C×D 欲轉換成前序式,步驟如下: 1.先用括號將優先順序分出來 ((A×B)+(C×D)) 2.將運算子移到最接近且有括住此運算子的左括號右邊,則依優先順序為 ((×AB)+(×CD)) (+(×AB)(×CD)) 3.把括弧全部拿掉,即為所得 +×AB×CD 德明科技大學資訊科技系

中序式→後序式 中序式為 A×B+C×D 欲轉換成後序式,步驟如下: 1.先用括號將優先順序分出來 ((A×B)+(C×D)) 2.將運算子移到最接近且有括住此運算子的右括號左邊,則依優先順序為 ((AB×)+(CD×)) ((AB×)(CD×)+) 3.把括弧全部拿掉,即為所得 AB×CD×+ 德明科技大學資訊科技系

中序運算式的計算 舉例: 中序運算式為 A+B*C-D p4-20 步驟1 建立運算元和運算子堆疊,並設初始為空的 步驟2 從左到右讀取運算式 讀到運算元則置入運算元堆疊(Stack1) 讀到運算子則置入運算子堆疊(Stack2) 德明科技大學資訊科技系

舉例: 中序運算式為 A+B*C-D 步驟3 讀取“*”時,由於“*”的優先權高於Stack2的top頂端運算子“+” ,故將“*”存入運算子堆疊 步驟4: 讀取 ’C’ 步驟5: 讀取“-”時,因為“-”優先權低於Stack2的top頂端運算子“*”,故取出“*”與兩個運算元進行計算,並將結果存回運算元堆疊 (Stack1)中。 德明科技大學資訊科技系

舉例: 中序運算式為 A+B*C-D 步驟6: 因為”-”時,優先權等於Stack2的頂端運算子”+”,故取出”+”與兩個運算元來進行計算,並將結果存回運算元堆疊(Stack1)中。將剛才未存入堆疊的”-”存入運算子堆疊 步驟7:讀取”D” 步驟8: 取出運算子“-”及運算元“A+B*C”及”D”進行計算,結果存回運算元堆疊 德明科技大學資訊科技系

中序表示法轉換成前序表示法 堆疊處理法 p4-24 由右而左掃描資料,依據資料是運算元或運算子作不同的處理;運算子還要考慮其優先次序 步驟1. 由右至左依序取得資料di(data item)。 步驟2. 如果di是運算元,則直接輸出。 步驟3. 如果di是運算子(含左右括號),則: (1)如果di=")",放入堆疊。 (2)如果di="(",依次輸出堆疊中的運算子,直到取出")"為止。 (3)如果di不是“)”或“(”,則與堆疊頂點的運算子ds(data of stack)作優先順 序比較: 當di較ds優先時, 則di放入堆疊,迴圈輸出堆疊資料,直到優先次序相等 當di不較ds優先或相等時,則ds輸出,di放入堆疊。 步驟4. 如果運算式已讀取完成,而堆疊中尚有運算子時,依序由頂端輸出。 步驟5. 反轉輸出的字串 德明科技大學資訊科技系

中序轉換成前序 範例:A+B*(C-D) 、由右而左讀取 (1)讀取:‘)’ push放入stack頂端 (4)讀取:‘C’ 輸出:C 目前輸出的字串:DC 德明科技大學資訊科技系 註:中序轉成前序時,右括號在堆疊中的優先順序最小

範例:A+B*(C-D) 、由右而左讀取 (6)讀取:‘*’ push放入stack頂端 (5)讀取:‘(’ 依序輸出(POP)堆疊中的運算子,直到取出‘)為止 輸出:- 目前輸出的字串:DC- (註:左右括號不會輸出顯示) (6)讀取:‘*’ push放入stack頂端 (7)讀取:’B’ 輸出:B 目前輸出的字串:DC-B 德明科技大學資訊科技系

範例:A+B*(C-D) 、由右而左讀取 (8)讀取:‘+’ Stack頂端的運算子優先權高,則先’*’輸出,’+’放入堆疊 輸出:* 目前輸出的字串:DC-B* (9)讀取:’A’ 輸出:A 目前輸出的字串:DC-B*A (10)輸出剩餘的Stack中的資料(運算式已經讀取完成, 而堆疊中尚有運算子時, 依序由頂端輸出) 輸出:+ 目前輸出的字串:DC-B*A+ (11)反轉輸出的字串 +A*B-CD 德明科技大學資訊科技系

中序表示法轉換成後序表示法 堆疊處理法 p4-29 由左而右掃描資料,依據資料是運算元或運算子作不同的處理,運算子還要考慮其優先次序 步驟1. 由左至右依序取得資料di(data item)。 步驟2. 如果di是運算元, 則直接輸出。 步驟3. 如果di是運算子(包含左右括號), 則: (1)如果di= "(", 放入堆疊。 (2)如果di= ")" ,依序輸出堆疊中的運算子, 直到取出 "(" 為止。 (3)如果di不是 “(” 或 “)” , 則與堆疊頂點的運算子ds(data of stack)作優先 順序比較: 當di較ds優先時, 則di放入堆疊。 當di不較ds優先或相等時, 則ds輸出,di放入堆疊。 步驟4.如果運算式已經讀取完成, 而堆疊中尚有運算子時, 依序由頂端輸出 德明科技大學資訊科技系

中序轉換成後序 範例:A+B*(C-D) 、由左而右讀取 (3) 讀取:’B’ 輸出:B 目前輸出的字串:AB p4-30 範例:A+B*(C-D) 、由左而右讀取 (1) 讀取:’A’ 輸出:A 目前輸出的字串:A (3) 讀取:’B’ 輸出:B 目前輸出的字串:AB (2) 讀取:‘+’ push放入stack頂端 (2) 讀取:‘*’ push放入stack頂端 德明科技大學資訊科技系

範例:A+B*(C-D) 、由左而右讀取 (5) 讀取:‘(’ push放入stack頂端 (7) 讀取:‘-’ push放入stack頂端 (6) 讀取:’C’ 輸出:C 目前輸出的字串:ABC (8) 讀取:’D’ 輸出:D 目前輸出的字串:ABCD 註:中序轉成後序時,左括號在堆疊中的優先順序最小 德明科技大學資訊科技系

範例:A+B*(C-D) 、由左而右讀取 (9) 讀取:‘ ) ’ 依序輸出(POP)堆疊中的運算子, 直到取出 “ ( ”為止 輸出:- (註:左右括號不會輸出顯示) (10)輸出剩餘的Stack中的資料(運算式已經讀取完成, 而堆疊中尚有運算子時, 依序由頂端輸出) 輸出:*+ 最後輸出的字串:ABCD-*+ 德明科技大學資訊科技系

前序表示法轉換成中序表示法 堆疊處理法 p4-36 1.由右至左依序取得資料di 2.如果di是運算元,則放入堆疊中。 (<運算元2><運算子><運算元1>)後,再將結果放入堆疊中 德明科技大學資訊科技系

前序轉換成中序 前序式+A*B-CD ,轉換成中序式 德明科技大學資訊科技系

後序表示法轉換成中序表示法 堆疊處理法 p4-39 1.由左至右依序取得資料di。 2.如果di是運算元,則放入堆疊中。 德明科技大學資訊科技系

後序轉換成中序 後序式ABCD-*+ ,轉換成中序式 德明科技大學資訊科技系