第4章 堆疊和佇列 資料結構設計與C++程式應用

Slides:



Advertisements
Similar presentations
資料結構與演算法 課程教學投影片.
Advertisements

第一單元 建立java 程式.
計算機程式語言實習課.
浙江省深化高校考试招生制度综合改革试点方案(2017新方案)
4-1 認識堆疊 4-2 堆疊的應用 4-3 算術運算式的求值 4-4 中序法轉換為前序法 4-5 前序與後序式轉換成中序式
摇摆的中东地区 永嘉县实验中学 张 杰.
摇摆的中东地区 永嘉县实验中学 张 杰.
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
测角被动雷达的技术方案 测角被动雷达 作者:陈必红 深圳大学数学系.
Chapter 5 遞迴 資料結構導論 - C語言實作.
主題五 CPU Learning Lab.
第三章 堆疊與佇列的基本應用 3-1 簡介堆疊(Stack) 3-2 迷宮問題研究 3-3 佇列(queue)的介紹
第6章 佇列(Queues) 6-1 佇列的基礎 6-2 佇列的表示法 6-3 環狀佇列 6-4 雙佇列.
資料結構 第3章 鏈結串列.
第 3 章 堆疊與佇列.
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置 4-2 鏈結串列的基礎 4-3 單向鏈結串列 4-4 環狀鏈結串列
課程名稱:資料結構 授課老師:_____________
佇列 (Queue).
佇列與推疊 (Queue and Stack)
資料結構設計與C++程式應用 Fundamentals of Data Structures and Their Applications Using C++ 第3章 佇列 資料結構設計與C++程式應用.
資料結構簡介.
Chapter 3 堆疊與佇列 3.1 堆疊和佇列基本觀念 3.2 堆疊的加入與刪除 3.3 佇列的加入與刪除 3.4 其他型式的佇列
第三章 堆疊與佇列 Stacks & Queues
鏈結串列 (Linked List).
Chap 3 堆疊與佇列 Stack and Queue.
Chapter 3 鏈結串列結構 資料結構導論 - C語言實作.
第十五章 Linked List, Stack and Queue
4 堆疊與佇列 4.1 前言 四種基本的資料結構 (可儲存資料的容器) 陣列 (Array)、串列(List): 最基本
(Circular Linked Lists)
堆疊簡介 遞迴 佇列 算術運算式的表示法 中序轉換為前序或後序 前序與後序轉換成中序
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
資料結構與演算法 第三章 堆疊和佇列 徐熊健.
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
第五章 堆疊 5-1 認識佇列 5-2 佇列的應用.
Chapter 3 堆疊與佇列 ( Stacks and Queues ).
鏈結串列 (Linked List) 註:要會指標(Pointer)
資料結構與C++程式設計進階 堆疊與佇列(Stack & Queue) 講師:林業峻 CSIE, NTU 6/ 21, 2010.
Ch03 鏈結串列結構 淡江大學 周清江.
Chapter 4 堆疊和佇列 資料結構導論 - C語言實作.
學習 2019/1/12. 學習 2019/1/12 Chapter 3 鏈結串列結構 資料結構導論 - C語言實作.
資料結構使用Java 第8章 佇列(Queue).
4.1 單向鏈結串列 4.2 堆疊的加入與刪除 4.3 佇列的加入與刪除 4.4 其他型式的佇列
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Chap3 Linked List 鏈結串列.
資料結構 第4章 堆疊.
第 四 章 堆疊(Stack) 課程名稱:資料結構 授課老師:________ 2019/2/23.
第一單元 建立java 程式.
資料結構 7-1 陣列 7-2 鏈結串列 7-3 堆疊和佇列 7-4 樹狀結構.
Chapter 4 資料結構.
Chapter 4 資料結構.
資料結構 優點 缺點 1 陣列 (Array) 沒有額外變量 (例head, next,...) 運作/操作較簡單 更新資料時,若要保持順序,需要移動較大量資料 靜態結構Static (宣告時已決定了陣列元素多少,不能在程式執行期間增減元素) 2 隊列Queue (FIFO) 容易更新 加入enqueue:
Chapter 3 堆疊與佇列 3.1 堆疊和佇列基本觀念 3.2 堆疊的機入與刪除 3.3 佇列的加入與刪除 3.4 環狀佇列
Linked Lists Prof. Michael Tsai 2013/3/12.
挑戰C++程式語言 ──第8章 進一步談字元與字串
Chap2 Stack & Queue.
進階佇列.
Chap2 Stack & Queue.
資料結構使用Java 第6章 鏈結串列(Linked List).
陣列與結構.
Chapter 4 鏈結串列 Linked List 2019/5/14.
資料結構使用Java 第7章 堆疊(Stack).
第7章 資料結構 7-1 陣列 7-2 鏈結串列 7-3 堆疊和佇列 7-4 樹狀結構.
期末報告第一題 通訊四甲 B 湯智瑋.
本教學投影片係屬教科書著作之延伸,亦受著作權法之保護。
第13章 電腦解題與演算法 13-4 資料結構.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
鏈結串列 (Linked List).
13-1 電腦可以協助解決哪些問題 13-2 電腦解題簡介 13-3 電腦解題規劃-演算法 13-4 認識資料結構
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

第4章 堆疊和佇列 資料結構設計與C++程式應用 Fundamentals of Data Structures and Their Applications Using C++ 第4章 堆疊和佇列 資料結構設計與C++程式應用 版權所有 禁止重製

堆疊及其應用 堆疊(Stack) 堆疊是一個有秩序關係的串列結構(Ordered List) 資料的插入和刪除只發生在堆疊的頂端(Top) 使得資料進出堆疊時產生「後進先出」的特性 歐式自助餐之餐盤堆放方式即是一個典型的堆疊結構

堆疊及其應用 堆疊的表示法及其基本運作 1. 產生堆疊結構: 利用程式語言的宣告(Declaration)指令,將堆疊宣告成陣列(假設陣 2.將資料放入堆疊(Push): 更改Top指標後,將資料存入堆疊,但必須先判斷堆疊 是否已滿(使用陣列時)。 3.刪除資料(Pop): 若堆疊不是空的,則將頂端資料取出,並更改Top指標值。 4.判斷堆疊是否滿溢: 判斷Top指標是否等於N-1?(使用陣列時)。 5.判斷堆疊是否是空的: Top值小於0(陣列)或Top指向NULL(鏈結串列)。

堆疊及其應用 堆疊的插入和刪除(採用陣列結構製作)

堆疊及其應用 堆疊的插入和刪除(採用鏈結串列結構製作)

堆疊及其應用 堆疊的插入和刪除(採用鏈結串列結構製作)

堆疊及其應用 堆疊的應用 1.副程式的呼叫和返回 程式A 呼叫副程式 B 副程式B再呼叫副程式C

堆疊及其應用 堆疊的應用 2.算術式的轉換 運算子的種類及其優先順序 算術式的三種表示法

堆疊及其應用 堆疊的應用 2.算術式的轉換 中置式轉前置式和後置式 【方法1】 (1). 依算術式求值規則用括號將相關運算括起來。 (2). 將運算子移到‘(’的左邊(前置式)或 ‘)’ 的右邊(後置式)。 (3). 取消所有的括號。

堆疊及其應用 堆疊的應用 2.算術式的轉換 中置式轉前置式和後置式 【例1】將 A-B*(C+D)/E 轉成後置式的步驟如下: (1) (2) (3) ABCD+*E/-

堆疊及其應用 堆疊的應用 2.算術式的轉換 中置式轉前置式和後置式 (以後置式為例) 【方法2】 (1). 從左到右依次讀取算術式,並令讀入的元素為x。 (2). switch(x){ case('('): 將x放入堆疊; break; case(')'): x=自堆疊頂端取出的運算子; while(x !='('){ 將x輸出至後置式中; x=自堆疊頂端取出的運算子; }

堆疊及其應用 case('+') : case('-') : case('*') : case('/') : y = 堆疊頂端的運算子; // 非取出堆疊資料 while(y 的優先序高於x) 取出堆疊頂端的運算子並輸出至後置式中; y = 堆疊頂端的運算子; } 將x放入堆疊; break; default : // x為運算元 將x輸出至後置式中; (3).最後將殘存於堆疊的運算子一一輸出到後置式,直到堆疊空了為止。

堆疊及其應用 堆疊的應用 2.算術式的轉換 【例2】中置式算術式A-B*(C+D)/E轉成後置式的過程

堆疊及其應用 堆疊的應用 3.後置式算術式求值 【例3】假設A=99,B=7,C=3,D=5,E=4,

堆疊及其應用 1.每次僅可搬移一個碟片。 2.從某一根柱子上取出之碟片一定要放到另外兩根柱子之一後才可 以再搬另一個碟片。 堆疊的應用 4.河內之塔(Towers of Hanoi) 1.每次僅可搬移一個碟片。 2.從某一根柱子上取出之碟片一定要放到另外兩根柱子之一後才可 以再搬另一個碟片。 3.無論何時,每一根柱子上之碟片都要保持上小下大的排列方式。

堆疊及其應用 步驟 < 1> 從 A 柱搬 1 號碟片到 C 柱 步驟 < 2> 從 A 柱搬 2 號碟片到 B 柱 堆疊的應用 4.河內之塔(Towers of Hanoi) 【例4】當 N=3 時,整個搬移過程為: 步驟 < 1> 從 A 柱搬 1 號碟片到 C 柱 步驟 < 2> 從 A 柱搬 2 號碟片到 B 柱 步驟 < 3> 從 C 柱搬 1 號碟片到 B 柱 步驟 < 4> 從 A 柱搬 3 號碟片到 C 柱 步驟 < 5> 從 B 柱搬 1 號碟片到 A 柱 步驟 < 6> 從 B 柱搬 2 號碟片到 C 柱 步驟 < 7> 從 A 柱搬 1 號碟片到 C 柱

佇列及其應用 佇列(Queue) 佇列也是一個有序串列 資料的插入和刪除分別發生在佇列結構的兩端 插入資料的一端叫做尾端(Rear),刪除資料的一端叫做前端(Front) 資料進出佇列的次序形成「先進者先出」的特性 排隊

佇列及其應用 佇列的表示法及基本運作 1.產生佇列結構: 宣告一個陣列結構或鏈結串列結構,並設定成空佇列, 2.將資料加入佇列: 即 Front=Rear=-1 或 Front=Rear=NULL(=0)。 2.將資料加入佇列: 若佇列未滿溢,則改變Rear指標後將資料存入佇列之Rear位置。 3.從佇列刪除一個元素: 若非空佇列,則改變Front指標後將Front所指到之佇列元素刪除。 4.判斷佇列是否滿溢: 當Rear=N-1時,表示佇列滿溢。(假設陣列之大小為N, 並且資料從第0個索引開始存放)。 5.判斷是否為空佇列: 當 Front=Rear時,為空佇列。

佇列及其應用 佇列的插入和刪除(以陣列製作)

佇列及其應用 佇列的應用 1. 環狀佇列(Circular Queues) 環狀佇列的插入和刪除

佇列及其應用 佇列的應用 1. 環狀佇列(Circular Queues)-續 一般佇列與環狀佇列之比較

佇列及其應用 佇列的應用 2.優先佇列(Priority Queues) 優先佇列結構(採用陣列實施)

佇列及其應用 佇列的應用 2.優先佇列(Priority Queues) 優先佇列結構(採用鏈結串列實施)

佇列及其應用 佇列的應用 3.雙向佇列(Double Ended Queues) 左端佇列加入A、B、C,右端佇列加入甲、乙、丙

多重堆疊和多重佇列(Multiple Stacks and Queues)

多重堆疊和多重佇列(Multiple Stacks and Queues) 多群系統

多重堆疊和多重佇列(Multiple Stacks and Queues) 環狀多重堆疊

多重堆疊和多重佇列(Multiple Stacks and Queues)