進階佇列.

Slides:



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

迷 宫 最短路径 施沈翔.
计算机三级考试C语言上机试题专题.
Chapter 5 迴圈.
第三章 堆疊與佇列的基本應用 3-1 簡介堆疊(Stack) 3-2 迷宮問題研究 3-3 佇列(queue)的介紹
第6章 佇列(Queues) 6-1 佇列的基礎 6-2 佇列的表示法 6-3 環狀佇列 6-4 雙佇列.
第6章 佇列(Queues) 6-1 佇列的基礎 6-2 佇列的表示法 6-3 環狀佇列 6-4 雙佇列.
資料結構 第3章 鏈結串列.
第 3 章 堆疊與佇列.
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置 4-2 鏈結串列的基礎 4-3 單向鏈結串列 4-4 環狀鏈結串列
Visual C++ introduction
課程名稱:資料結構 授課老師:_____________
佇列 (Queue).
資料結構設計與C++程式應用 Fundamentals of Data Structures and Their Applications Using C++ 第3章 佇列 資料結構設計與C++程式應用.
4.4 佇列 特徵: c b a c b d c b 新增 d 刪除 入口 入口 入口 尾端(rear) 尾端(rear) 尾端(rear)
資料結構 第5章 佇列.
鏈結串列 (Linked List).
4.1 單項鏈結串列 4.2 環狀串列 4.3 雙向鏈結串列 4.4 鏈結串列之應用
Chapter 3 鏈結串列結構 資料結構導論 - C語言實作.
串列(List) 撰寫一串列程式.
第十五章 Linked List, Stack and Queue
cn/~dongeliu/dsa.html 刘 东 信息学院6系 中国科学技术大学
第3章 栈和队列(二) 1/.
(Circular Linked Lists)
堆疊簡介 遞迴 佇列 算術運算式的表示法 中序轉換為前序或後序 前序與後序轉換成中序
第五章 堆疊 5-1 認識佇列 5-2 佇列的應用.
第3章 堆栈和队列 堆栈 堆栈应用 队列 队列应用 优先级队列 主要知识点.
第三章 栈与队列 £3.1 栈 £3.3 队列 £3.2 栈的应用举例 £3.1.1 栈的定义 £3.1.2 栈的顺序存储结构
第三章 栈和队列 3.1 栈 3.2 栈的应用举例 3.3 栈与递归的实现 3.4 队列.
第三章 栈和队列.
数据结构 Data Structure 中南大学 主讲人:王国军,郑瑾 中南大学信息院计科系
鏈結串列 (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 其他型式的佇列
第三章 鏈結串列 3-1  單向鏈結串列 3-2 環狀鏈結串列 3-3 雙向鏈結串列.
Java 程式設計 講師:FrankLin.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Chap3 Linked List 鏈結串列.
佇列(queue) Lai Ah Fur.
第三章 栈和队列.
严蔚敏、吴伟民编著 清华大学出版社 学习网站:
Chapter 4 資料結構.
Chapter 4 資料結構.
資料結構 優點 缺點 1 陣列 (Array) 沒有額外變量 (例head, next,...) 運作/操作較簡單 更新資料時,若要保持順序,需要移動較大量資料 靜態結構Static (宣告時已決定了陣列元素多少,不能在程式執行期間增減元素) 2 隊列Queue (FIFO) 容易更新 加入enqueue:
BC430 ABAP Dictionary Views、 Search Help 報告者:林聖期、程汎汝.
Linked Lists Prof. Michael Tsai 2013/3/12.
期末考.
挑戰C++程式語言 ──第8章 進一步談字元與字串
Chap2 Stack & Queue.
第四章 栈和队列 栈 ( Stack ) 队列 ( Queue ) 优先队列 (Priority Queue) 小结.
樣版.
C qsort.
Chap2 Stack & Queue.
資料結構使用Java 第6章 鏈結串列(Linked List).
陣列與結構.
第4章 堆疊和佇列 資料結構設計與C++程式應用
11058: Encoding ★☆☆☆☆ 題組:Problem Set Archive with Online Judge
資料結構與C++程式設計進階 期末考 講師:林業峻 CSIE, NTU 7/ 15, 2010.
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
資料結構使用Java 第5章 串列程式實作.
Chapter 2 Entity-Relationship Model
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
鏈結串列 (Linked List).
微 處 理 機 專 題 – 8051 C語言程式設計 主題:階乘計算
資料結構 Data Structure (資管二)
Presentation transcript:

進階佇列

環狀佇列 (Circular Queue)

定義 以一維陣列Q(0 To n-1)表示一個環狀佇列 指標front永遠以逆時鐘方向指向佇列前端元素的前一個位置 指標Rear則指向佇列尾端的元素

資料之加入和刪除 資料是加入到rear = (rear+1) mod n 的陣 列位置 刪除動作是刪掉陣列front = (front +1) mod n

環狀佇列的問題 其實環形佇列還剩餘一個空間可以使用,但是這是為了判斷以下的情形而預留的,不可使用: 佇列已空 q.rear =q.front 佇列已滿 q.rear =q.front 因此最多只能使用n-1個空間,而浪費一個空間。

環狀佇列已空或佇列已滿之判別條件皆為q.rear =q.front 容易產生模擬兩可的情形,如何修正改進這個兩個缺點呢? 修正演算法 問題:如何區分佇列已空或佇列已滿 方法:修改環狀佇列已空或佇列已滿之條件 佇列已空之充要條件 q.rear = q.front 成立 佇列已滿之充要條件 q.front = (q.rear+1)%MaxQueue 成立 (空出最後一個空間不用)

基本運算之演算法 加入元素於環狀佇列之後端 void enqueue (int data) /* 此函數將data放入環狀queue 之後端 */ { q.rear = (q.rear+1)%MaxQueue; /* 先將 q.rear指向下一個位置 */ if (q.front == q.rear+1) { printf (“ queue is full \n”); exit(1); } else q.item[q.rear] = data; //將q.rear +1後,再將新元素data放在q中

於環狀佇列之前端刪除元素 /* 將q.front +1後,此時q.front 指向 queue 之第一個元素,再傳回此值 */ int dequeue (void) /* 此函數自queue 之前端刪除元素 */ { if (q.front == q.rear) /* q.front == q.rear 表 queue 為空 */ { printf (“ queue is empty \n”); exit(1); } else { q.front = (q.front+1)%MaxQueue; return ( q.item[q.front] ); /* 將q.front +1後,此時q.front 指向 queue 之第一個元素,再傳回此值 */

問題: 環形佇列最多只能使用n-1個空間,而浪費 一個空間 方法:另外設立一個變數judge來區分 加入資料後 Judge=1時,則表示佇列已滿 刪除資料後 Judge=0時,則表示佇列已空

優先佇列 (Priority Queue)

使用時機 優先佇列經常被用來處理緊急或特權作業 也就是正常的排隊順序中允許高優先權的作業插隊。 例如醫院急診室,最嚴重的患者優先治療; 飛機場飛機在空中且油料快用完了,優先降落(使用跑道)

優先佇列結構 (採陣列)

優先佇列與堆疊、佇列的不同 元素進入的時間不是決定性的因素 優先佇列不擷取和移去最晚或最早插入的元素 它只根據佇列中那一個有最高優先權,才有最先機會被擷取。

優先佇列的製作-陣列 最簡單的方法是採用陣列 當我們要移除某元素,可搜尋整個串列中具有最高優先權者; 欲插入元素只須插在頭部便可。

優先佇列的製作-鏈結串列 另一種較好的方法是採用鏈結串列 串列內的元素依優先順序排列 最高優先順序者排在串列的頭部 要移除(服務)只須將頭部元素移除,它的後繼者就變成新的首端元素 插入將較複雜,須根據優先順序來決定其插入位置。

優先佇列結構 (採鏈結串列)  

雙向佇列 (Double Ended Queue)

定義 雙向佇列又稱為Deque 資料的刪除和加入可以指定發生在佇列那一端 此種佇列有兩個前端(Front)及尾端(Rear)

雙向佇列結構

雙向佇列的插入及刪除資料

雙向佇列基本運作資料流程圖 -(插入)

雙向佇列基本運作資料流程圖-(刪除)