4 堆疊與佇列 4.1 前言 四種基本的資料結構 (可儲存資料的容器) 陣列 (Array)、串列(List): 最基本

Slides:



Advertisements
Similar presentations
12.1 轴对称( 1 ) 一.课堂引入 中国古代的建筑举世闻名,我们看看以下建 筑有什么共同特征 ?
Advertisements

12.1 轴对称( 1 ) 给我最大快乐的, 不是已懂的知识, 而是不断的学习 高斯.
首页 全国高等学校招生考试统一考试 监考员培训 广州市招生考试委员会办公室.
司 法 考 试 题 2002年——2009年.
必修2 第一单元 古代中国经济的基本结构和特点
人口增长.
诚信为本、操守为重、坚持准则、不做假账 第 九 章 会 计 报 表.
第八章 互换的运用.
无效宣告请求书与 意见陈述书代理实务 国家知识产权局专利复审委员会
发明和新型专利申请文件撰写 说明书的撰写 权利要求书的撰写 具体案例撰写分析.
普通高等学校 本科教学工作水平评估方案.
第一章 会计法律制度 补充要点.
二、个性教育.
2011年10月31日是一个令人警醒的日子,世界在10月31日迎来第70亿人口。当日凌晨,成为象征性的全球第70亿名成员之一的婴儿在菲律宾降生。 ?
江苏省2008年普通高校 招生录取办法 常熟理工学院学生处
氧气的制法 装置 原理 练习 随堂检测.
第一节 工业的区位选择 一、工业的主要区位因素 1、工业区位选择应注意的问题 2、影响工业布局的主要区位因素 3、不同工业部门的区位选择
南美洲 吉林省延吉一高中 韩贵新.
初级会计实务 第八章 产品成本核算 主讲人:杨菠.
问题解决与创造思维 刘 国 权 吉林省高等学校师资培训中心.
中考阅读 复习备考交流 西安铁一中分校 向连吾.
第四单元 自觉依法律己 避免违法犯罪.
大数的认识 公顷和平方千米 角的度量、平行四边形和梯形 四年级上册 三位数乘两位数 除数是两位数的除法 统计.
财经法规与会计职业道德 (3) 四川财经职业学院.
中央广播电视大学开放教育 成本会计(补修)期末复习
人教版义务教育课程标准实验教科书 小学数学四年级上册第七单元《数学广角》 合理安排时间 248.
第三单元 发展社会主义民主政治.
市级个人课题交流材料 《旋转》问题情境引入的效果对比 高淳县第一中学 孔小军.
3.3 资源的跨区域调配 ——以南水北调为例 铜山中学 李启强.
出卖人转移标的物的所有权于买受人,买受人支付价款的合同。 (一)特点 1.双务合同 2.有偿合同 3.诺成合同 4.非要式合同
秦王该不该杀? 张艺谋把秦始皇描述为千古一帝的英雄,对这个问题,你有什么看法?.
温 馨 提 示 感谢您从“河姆渡教师教育网”下载使用该PPT文件,仅供学习参考,未经作者同意勿在公开场合使用,谢谢合作!
我国三大自然区.
专题二 识图题增分技巧.
第十二单元 第28讲 第28讲 古代中国的科技和文艺   知识诠释  思维发散.
中考语文积累 永宁县教研室 步正军 2015.9.
小学数学知识讲座 应用题.
勾股定理 说课人:钱丹.
倒装句之其他句式.
江苏省2009年普通高校 招生录取办法 江苏省教育考试院
三角形的邊角關係 大綱:三角形邊的不等關係 三角形邊角關係 樞紐定理 背景知識:不等式 顧震宇 台灣數位學習科技股份有限公司.
第三章 堆疊與佇列的基本應用 3-1 簡介堆疊(Stack) 3-2 迷宮問題研究 3-3 佇列(queue)的介紹
佇列與推疊 (Queue and Stack)
資料結構簡介.
4.4 佇列 特徵: c b a c b d c b 新增 d 刪除 入口 入口 入口 尾端(rear) 尾端(rear) 尾端(rear)
Chap 3 堆疊與佇列 Stack and Queue.
第十五章 Linked List, Stack and Queue
堆疊 Stack chapter 4 德明科技大學資訊科技系.
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
第 六 章 鏈結串列(Link List) 課程名稱:資料結構 授課老師:________ 2019/1/2.
人教版数学四年级(下) 乘法分配律 单击页面即可演示.
一、认真审题,明确作图目的。 二、作图按投影规律准确无误。 三、图线粗细分明。 四、需要保留作图线的一定保留。
資料結構 第4章 堆疊.
樹 2 Michael Tsai 2013/3/26.
知识点二 国际环境法的实施.
熔化和凝固.
第五章 相交线与平行线 三线八角.
北师大版八年级数学上册 3·1 生活中的平移 澂江四中 李丽波.
Chap2 Stack & Queue.
第四章 栈和队列 栈 ( Stack ) 队列 ( Queue ) 优先队列 (Priority Queue) 小结.
基础会计.
5.2.2平行线的判定.
▲重合的概念 ▲對應頂點、對應邊、對應角 ▲全等的記法 ▲全等性質 ▲三角形全等性質
第八节 算术运算符和算术表达式.
坚持,努力,机会留给有准备的人 第一章 四大金融资产总结 主讲老师:陈嫣.
Data Structure.
畢氏定理(百牛大祭)的故事 張美玲 製作 資料來源:探索數學的故事(凡異出版社).
圣经概論 09.
102年人事預算編列說明 邁向頂尖大學辦公室製作.
Presentation transcript:

4 堆疊與佇列 4.1 前言 四種基本的資料結構 (可儲存資料的容器) 陣列 (Array)、串列(List): 最基本 4 堆疊與佇列 4.1 前言 四種基本的資料結構 (可儲存資料的容器) 陣列 (Array)、串列(List): 最基本 堆疊(Stack)、佇列(Queue) 1

4.2 堆疊 特徵 出入口在相同地方:頂端 (top) 新增(push)、刪除(pop) 都要透過 top 資料進出永遠保持 “後進先出” (Last In First Out,LIFO) 的順序 歐式自助餐之餐盤堆放方式即是一個典型的堆疊結構

4.2.1 以陣列實作堆疊(ch4_stack_1.java) class Stack { int data_array[ ]; // 堆疊陣列 int top; // 堆疊頂端指標 int n; // 堆疊容量為 n } 以陣列來實作堆疊的基本動作 1.建構子 a. 產生堆疊資料陣列: 生成一個 data_array[n] 陣列, 後續新增 (push) 資料從第0個索引開始存放。 b.將堆疊頂端指標 top 設為 -1,表示目前為空堆疊

4.2.1 以陣列實作堆疊 (ch4_stack_1.java) 以陣列來實作堆疊的基本動作 (續) 2. 將資料 data 放入堆疊( push(data) ): 先判斷堆疊是否已滿,如果未滿,將 top 指標的值加 1 後,將 data_array[top] 這個陣列元素的值設為 data 3.刪除資料( pop( ) ): 若堆疊不是空的,則將頂端資料 data_array[top] 的值取出, 將 top 指標的值減 1 。 4.判斷堆疊是否滿溢 ( full( ) ): 判斷 top 指標是否等於 n-1? 5.判斷堆疊是否是空的 ( empty( ) ): 判斷 top值是否小於 0 6. 取得堆疊頂端的資料,但不刪除 ( gettop( ) ): 若堆疊不是空的,則將頂端資料 data_array[top] 的值取出

4.2.2 以串列實作堆疊(ch4_stack_2.java) class Node //節點 { int data; Node link; } 以串列來實作堆疊的基本動作 1.建構子 a. 產生 top 節點: b. 將 top.link 設為 null public class Stack_2 { Node top; }

4.2.2 以串列實作堆疊(ch4_stack_2.java) 以串列來實作堆疊的基本動作 (續) 2. 將資料 data 放入堆疊( push(data) ): 新增節點 x,將 x.data 設為 data,將 x.link 設為 top.link ,再將 top.link 設為 x 3.刪除資料( pop( ) ): 先讀取 top.link.data 的值到變數 data,再將 top.link 設為 top.link.link,最後傳回 data。 4.判斷堆疊是否滿溢 ( full( ) ): 沒有這個方法 5.判斷堆疊是否是空的 ( empty( ) ): 判斷 top.link 的值是否為 null 6. 取得堆疊頂端的資料,但不刪除 ( top( ) ): 傳回 top.link.data

4.2.3 以陣列及串列實作堆疊之比較

4.3 堆疊的應用 4.3.1 方法的呼叫 4.3.2 運算式的表示法與轉換 4.3.3 運算式求值 4.3.4 河內塔 (跳過) 4.3.5 圖形的深度優先搜尋(第 7 章再看)

4.3.1 方法的呼叫 2 3 1 4 6 5

4.3.2 運算式的表示法與轉換 算術運算式 (Arithmetic Expression) 運算元 (operand) 運算子(operator) Example: a^b-c+d*(e+f) 中 運算元:a, b, c, d, e, f 運算子:^, -, +, *, (, ) 算術運算子之優先序(當沒有括號時尤其重要) 算術運算子 優先序 ^ (次方) 3 * / 2 + - 1 ( )

4.3.2 運算式的表示法與轉換 依據運算子所在位置在運算元之前、中、後,運算式 有 3 種表示法: 前置式 (Prefix): 不能使用括號 中置式 (Infix):可以使用括號 後置式 (Postfix):不能使用括號

4.3.2 運算式的表示法與轉換 作業 範例

4.3.2 運算式的表示法與轉換 給定運算子之值,電腦 先將中值式透過堆疊 轉換成後置式,再以堆疊 的方式計算其值

利用堆疊將中置轉為後置式的做法 由左至右依序讀入每一個運算式中的字元 c 1. 如果 c 是運算元 (即範例中的 a, b, c 等), 則直接輸出到後置式 2. 如果 c 是運算子(即範例中的 +, -, *, ^ 等), 則有 3 種情形 i. c 為 ‘(‘:將 c 放入堆疊 ii. c 為 ‘)’:持續取出堆疊頂端的字元 d, 如果取出的字元 d 不是左括號 將 d 輸出至後置式 如果取出的字元 d 是左括號 停止取出堆疊頂端字元 iii. c 為其他運算子:持續取出堆疊頂端的優先序大於等於 c 的運算子 k 將 k 輸出至後置式 再將 c 放入堆疊

例 4:利用堆疊將中置式 a-b/c+(d*e)-f 轉為後置式 Note: 堆疊只存放運算子,不放運算元 運算子須先放入堆疊,然後在適當時機取出 從堆疊中取出的運算子直接輸出到後置式 例 4:利用堆疊將中置式 a-b/c+(d*e)-f 轉為後置式 步驟 讀入之字元 處理方式 堆疊 (頂端在右方) 後置式的輸出結果 空堆疊 1 a 輸出 a 2 - 將 - 放入堆疊 3 b 輸出 b ab 4 / 將 / 放入堆疊 -/ 5 c 輸出 c abc 6 + 從堆疊取出 / 並將其輸出 從堆疊取出 - 並將其輸出 將 + 放入堆疊 abc/-

練習: (a-b)/(c-d)^e a^(b+c)/d-e a+b*(c-d)^e-f 步驟 讀入之字元 處理方式 堆疊 (頂端在右方) 後置式的輸出結果 7 ( 將 ( 放入堆疊 +( abc/- 8 d 輸出 d abc/-d 9 * 將 * 放入堆疊 +(* 10 e 輸出 e abc/-de 11 ) 從堆疊取出 * 並將其輸出 從堆疊取出 ( + abc/-de* 12 - 從堆疊取出 + 並將其輸出 將 - 放入堆疊 abc/-de*+ 13 f 輸出 f abc/-de*+f 14 從堆疊取出 - 並將其輸出 空堆疊 abc/-de*+f- 練習: (a-b)/(c-d)^e a^(b+c)/d-e a+b*(c-d)^e-f

練習(課本 第4-97頁 第 19 題) 下列中置運算式之後置式表示法為何 a*b/c (a-b)/(c-d)^e a/b-c/(d+e)*f a^(b+c)/d-e a+b*(c-d)^e-f

4.3.3 運算式求值 給定運算元之值後,中置式計算原則 由左而右計算結果 優先處理括號,其餘依照運算子的優先順序處理 例如: a – b/c + (d * e) – f 3 – (12/4)+(2*6)-5 必須考慮括號及運算子優先序,相當複雜,因此電腦先將 中置式透過堆疊轉換成後置式,再以堆疊的方式計算其值

後置式運算式求值

abc/-de*+f-

練習 (課本 第4-97頁 第 20 題) 下列後置式運算式之值為何 ab*c/ ab-cd-e^/ ab/cde+/f*-

作業 寫一程式將 中置式運算式 轉換成 前置式運算式 請 擴充 ch4_postfix.java 的程式,於得到各個後置式後, 請使用者輸入各變數及其值,再計算出在這些變數給定 值的情況下該後置式的值。輸出範例: 中置運算式:a-b/c+(d*e)-f 後置運算式:abc/-de*+f- 請輸入變數之值,結束請輸入 ‘.’ > a > 2 > b > 4 > c > d > 2 > e > 3 >f >4 >. 運算式值為:2

作業第 1 題說明 中序轉前序(Converting Infix to Prefix) 將輸入字串由右至左一個一個讀入字元 運算元由右至左直接輸出,運算子也是由右至左輸出,但需考慮以 下 3-5 的情況 若讀入之運算子優先權高於堆疊最上面的運算子則推入堆疊,但讀 入之右括號有最高優先權,已推入堆疊之右括號優先權則變為最低 (推入時機) 若讀入之運算子優先權低於(含等於)堆疊最上面的運算子,彈出堆 疊之運算子,但讀入之左括號優先權最低,應持續彈出堆疊之運算 子直到遇到一右括號,括號在輸出時應自動刪除 (彈出時機) 輸入字串結束時彈出所有堆疊內之運算子