第三章 堆疊與佇列 Stacks & Queues

Slides:



Advertisements
Similar presentations
電腦與問題解決 5-1 電腦解題概論 5-2 電腦解題程序 5-3 演算法概論.
Advertisements

Course 1 演算法: 效率、分析與量級 Algorithms: Efficiency, Analysis, and Order
浙江省深化高校考试招生制度综合改革试点方案(2017新方案)
培训与开发 国家人力资源管理师二级职业资格认证—培训教程 吴昌品.
動畫與遊戲設計 Data structure and artificial intelligent
摇摆的中东地区 永嘉县实验中学 张 杰.
摇摆的中东地区 永嘉县实验中学 张 杰.
问题解决与创造思维 刘 国 权 吉林省高等学校师资培训中心.
第四单元 自觉依法律己 避免违法犯罪.
高考新改革与过渡 怀化市铁路第一中学 向重新.
約用工讀生/學生助理說明會 人事室報告
程序设计基础知识.
TQC+ 物件導向程式認證-JAVA.
市级个人课题交流材料 《旋转》问题情境引入的效果对比 高淳县第一中学 孔小军.
安全系着你我他 安全教育知识竞赛.
崇拜即將開始,請大家安靜片刻, 預備心靈敬拜上帝。
计算机导论 ——软件部分 巢爱棠 办公室:1208.
File Access 井民全製作.
書名 Java於資料結構與演算法之實習應用
 人体的营养.
江苏省2009年普通高校 招生录取办法 江苏省教育考试院
三角形的邊角關係 大綱:三角形邊的不等關係 三角形邊角關係 樞紐定理 背景知識:不等式 顧震宇 台灣數位學習科技股份有限公司.
Chapter 3: Stack.
! 温故知新 上下文无关文法 最左推导 最右推导 自上而下 自下而上 句柄 归约 移进-归约冲突 移进-归约分析 递归下降预测分析
Chap4 Tree.
第三章 堆疊與佇列的基本應用 3-1 簡介堆疊(Stack) 3-2 迷宮問題研究 3-3 佇列(queue)的介紹
第6章 佇列(Queues) 6-1 佇列的基礎 6-2 佇列的表示法 6-3 環狀佇列 6-4 雙佇列.
第 3 章 堆疊與佇列.
樹狀結構 陳怡芬 2018/11/16 北一女中資訊專題研究.
佇列 (Queue).
佇列與推疊 (Queue and Stack)
資料結構簡介.
4.4 佇列 特徵: c b a c b d c b 新增 d 刪除 入口 入口 入口 尾端(rear) 尾端(rear) 尾端(rear)
講師:郭育倫 第3章 基本資料結構 講師:郭育倫
Chap 3 堆疊與佇列 Stack and Queue.
Chapter 6 Graph Chang Chi-Chung
第十五章 Linked List, Stack and Queue
4 堆疊與佇列 4.1 前言 四種基本的資料結構 (可儲存資料的容器) 陣列 (Array)、串列(List): 最基本
cn/~dongeliu/dsa.html 刘 东 信息学院6系 中国科学技术大学
堆疊 Stack chapter 4 德明科技大學資訊科技系.
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
資料結構與C++程式設計進階 堆疊與佇列(Stack & Queue) 講師:林業峻 CSIE, NTU 6/ 21, 2010.
Data Structure.
佇列(queue) Lai Ah Fur.
資料結構 第4章 堆疊.
第四章 堆疊與佇列 課前指引 資料結構學科中,堆疊(Stack)與佇列是兩種相當典型的抽象資料型態,也是一種有特定進出規則的線性串列應用,主要特性是限制了資料插入與刪除的位置和方法。本章中將會介紹堆疊與佇列的概念與特性,及在計算機領域的各種相關應用。
樹 2 Michael Tsai 2013/3/26.
感謝同學們在加分題建議. 我會好好研讀+反省~
認清目的 哥林多書10:23-33.
樱花和富士山.
資料結構 優點 缺點 1 陣列 (Array) 沒有額外變量 (例head, next,...) 運作/操作較簡單 更新資料時,若要保持順序,需要移動較大量資料 靜態結構Static (宣告時已決定了陣列元素多少,不能在程式執行期間增減元素) 2 隊列Queue (FIFO) 容易更新 加入enqueue:
自我參考結構 (self-reference – 1)
常宝宝 北京大学计算机科学与技术系 数据结构(三) 常宝宝 北京大学计算机科学与技术系
海報評比 班級:系統四甲 學號: 姓名:蔡飛宏 授課老師:唐蔚.
知识点二 国际环境法的实施.
软件工程 第四章 软件设计 软件过程设计技术与工具.
3.5 Region Filling Region Filling is a process of “coloring in” a definite image area or region. 2019/4/19.
Linked Lists Prof. Michael Tsai 2013/3/12.
Chap2 Stack & Queue.
第四章 栈和队列 栈 ( Stack ) 队列 ( Queue ) 优先队列 (Priority Queue) 小结.
▲重合的概念 ▲對應頂點、對應邊、對應角 ▲全等的記法 ▲全等性質 ▲三角形全等性質
Create and Use the Authorization Objects in ABAP
直线运动习题精选(总分50分) 1、电磁打点计时器使用 流 V电源,电火花计时器使用 流 V电源。
怎樣把同一評估 給與在不同班級的學生 How to administer the Same assessment to students from Different classes and groups.
尺規作圖 大綱: 線段 角度 垂直平分線與角平分線 張婷萱 台灣數位學習科技股份有限公司.
Data Structure.
13-1 電腦可以協助解決哪些問題 13-2 電腦解題簡介 13-3 電腦解題規劃-演算法 13-4 認識資料結構
臺中市政府警察局 烏日分局 主講人:副分局長 蔡期望 時 間:105年9月10日.
InputStreamReader Console Scanner
Presentation transcript:

第三章 堆疊與佇列 Stacks & Queues A farmer learns more from a bad harvest than a good one.

練功前的沉思 Q1:What is stack? Q2:What is queue? Q3:What is circular queue? Q3:How to implement stack using C? Q4:How to implement Queue using C? Q5:When do we apply stack and queue to solve problems? 李麗華--資料結構講義

WHAT IS STACK? Def: A stack, S, is a finite ordered list in which the operation of inserting and deleting of an item is done in only one side of the list. Characteristics: 1. Last In First Out(LIFO) 2. Last Come First Serve(LCFS) 3. In and out in only one end 4. Push and Pop operation Top S I S I H T Bottom 例: 要加入6個字元 T, H, I, S, I, S 到Stack S 李麗華--資料結構講義

Inserting and deleting items into a stack B A D C E top Bottom Initial List Insert A then B Insert C Insert D Insert E Delete E 動動手:設有一長度為4的stack,請試著依下面順序模擬: (1) PUSH A,B,C (2) POP, POP (3) PUSH D,E,F (4) PUSH G, (6) POP, POP, POP, POP, POP 李麗華--資料結構講義

Push & Pop Stack using C void push(int S[], int MAX, int top) { if (top >= MAX-1) printf(“\n Stack is FULL !! \n”) ; else { top++; printf(“\n Enter a number to be inserted:“); scanf(“%d”, &S[top]); } void pop(int S[], int top) { if (top < 0) printf(“\n Stack is Empty !! \n”) ; else printf(“\n Item %d is deleted“, S[top]); top-- ; } 李麗華--資料結構講義

WHAT IS QUEUE? Def: A Queue, Q, is a finite ordered list in which the operation of inserting and deleting of an item is done in different side of the list. Characteristics: 1. First In First Out(FIFO) 2. First Come First Serve(FCFS) 3. Two ends are used rare S I H T front 例: 要加入4個字元 T, H, I, S 到Queue Q 李麗華--資料結構講義

Inserting and deleting items into a Queue Let f = front pointer & r = rare pointer r B A D C E f Initial List Insert A then B Insert C Insert D Delete A Delete B Insert E 動動手:設有一長度為5的Queue,請試著依下面順序模擬: (1) Insert A,B,C (2) Delete, Delete (3) Insert D,E (4) Delete, Delete, (6) Insert F, (7) Delete, Delete 李麗華--資料結構講義

Insert & Delete in Queue using C void in_q(int Q[], int MAX, int r) { if (r >= MAX-1) printf(“\n Queue is FULL !! \n”) ; else { r++; printf(“\n Enter a number to be inserted:“); scanf(“%d”, &Q[r]); } void de_q(int Q[], int f, int r) { if ( f > r ) printf(“\n Queue is Empty!! \n”) ; else printf(“\n Item %d is deleted“, Q[f]); f++ ; } What is the problem for queue structure? 李麗華--資料結構講義

Circular Queue (CQ) front: one position clockwise from the first element rear : current end [2] [1] [2] [1] B A [3] [0] [3] C [0] ... [n-2] [n-1] [4] [5] Empty Circular Queue The initial value f=0, r=0 After insert A, B, C then f= 0, r = 3 李麗華--資料結構講義

Insert & Delete in CQ using C void in_cq(int CQ[], int MAX, int r) { r = (r+1) % MAX; if ( f == r ) { printf(“\n Queue is FULL !! \n”) ; if ( r == 0 ) r = MAX - 1; else r = r - 1; } else { printf(“\n Enter a number to be inserted:“); scanf(“%d”, &CQ[r]); void de_cq(int CQ[], int f, int r) { if ( f == r ) printf(“\n Queue is Empty!! \n”) ; else { f = (f+1) % MAX; printf(“\n Item %d is deleted“, CQ[f]); } 動動手: 設一個長度為5的CQ,請依 下列順序模擬(1)Insert A,B,C,D (2)Del, Del (3)Insert E,F,G (4)Del,Del (5)Insert H,I 李麗華--資料結構講義

Application--Prefix, Infix, Postfix 堆疊有許多可應用的地方,在程式編譯時就常會利用堆疊將中序運算式轉成後序運算式,編譯後電腦(CPU)可迅速的將運算元(Operand)與運算子(Operator)取出並運算. 中序式(Infix):即一般我們熟知的運算式表示法, 如: A + B * C (運算子即 +, *, 而運算元即A,B,C) 後序式(Postfix):主要是將運算子放在欲運 算的運算元之後, 如: A B C * + 前序式(Prefix) : 主要是將運算子放在欲運 算的運算元之前, 如: +A *B C 李麗華--資料結構講義

From Infix to Postfix The process steps are: (ex: A*B/C-D ) 1. Properly add parenthesis,i.e., (), into the expression with correct priority.  (((A*B)/C)-D) 2. Move all the operator to the right  ((AB)*C)/D)- 3. Delete all the ()  AB*C/D- 李麗華--資料結構講義

The Priority of Operator 動動腦 & 動動手 將下列infix轉postfix A+B*C/D*F A-B/C+D*E-F%G C/(A*B)+(B+C)*D A+(-B)-C*(-D) Operator Priority ---------------- --------- +, -, ! 6 *, /, % 5 +, - 4 <, <=, >, >= 3 && 2 || 1 高 低 李麗華--資料結構講義

Using Stack: From Infix to Postfix example: A*B/C-D (將運算子push到stack中) Get / Pop * Push / Get - Pop / Push - Initial Stack Get A Get B Get C Get D Pop all Get * push * * / / - - 輸出 結果 A A AB AB* AB*C AB*C/ AB*C/D AB*C/D- 李麗華--資料結構講義

The process from infix to postfix (1) 依序讀入中序式的一個字元 (2) 若此字元為空(表中序式己讀完), --> 則pop所有運算子在stack內,並輸出 --> stop 否則若此字元為運算元(即變數像A,B,C,D...) -->則直接輸出 否則若此字元為運算子(即+,-,*,/,%,|...) -->則若stack內的運算子priority較大則 pop並輸出 -->否則push此運算子到stack (3) Go To 步驟 (1) 特例: 遇見左括號“(”, 無論如何定要push到stack內,直到遇見右括號“)”, 遇見右括號後則要pop運算子直到遇見左括號“(”止. 李麗華--資料結構講義

Another example: Infix to Pretfix 步驟 1 2 3 4 5 6 7 8 9 10 11 12 13 讀入字元 A - B * ( C + D ) / E 輸入過程 AB ABC ABCD ABCD+ ABCD +* ABCD+*E ABCD+*E/ ABCD+*E/- 堆疊內容 空 - * - *( - *( + - / 範例: A-B*(C+D)/E 動動手: -(A+B)*(C+D) A&&(B<C)||(D>B) 李麗華--資料結構講義

Application: CUP computes 電腦裡的運算式, 其實是CPU利用postfix式子, 加上運用暫存器來做堆疊,算出最後的值. 例: 用之前的postfix ABCD+*E/- 令: A=99, B=7, C=3, D=5, E=4 步驟 1 2 3 4 5 6 7 8 9 讀入字元 A B C D + * E / - 堆疊內容 A, B A, B, C A, B, C, D A, B, 8 A, 56 A, 56, E A, 14 85 李麗華--資料結構講義

大師—該動動腦囉!! 第三章習題請解答下列並以紙本繳交: 第1題的(1)~(9)小題, 其中第(5),(6)小題, 請畫出stack內的運算子被push與pop的經過. 請implement一個程式: (1)中序式轉成後序式: 你的程式應該要求user輸入中序式(不含空格), 程式應設最多可讀入3~20個字元的中序式(以“#”字元做結束)後, 將轉好的後序式輸出到螢幕, (2)本程式接著再詢問user各個變數(應為大寫字母)的值, 利用己做好的後序式, 將運算後的值求出, 並輸出到螢幕上. 請交執行檔與原始檔, 檔名為: 學號-2.exe, 例: 9054007-2.exe) 回家動動腦 上課來發表 你還知道Stack 與 Queue 可以用在哪些生活面或實務面的哪些應用領域上? 請舉例說明. 李麗華--資料結構講義

Failure is the only opportunity to begin more intelligently. 唯有經歷失敗才能開啟智慧 --Henry Ford 李麗華--資料結構講義