第五章 堆疊 5-1 認識佇列 5-2 佇列的應用.

Slides:



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

第一單元 建立java 程式.
Introduction to C Programming
計算機程式語言實習課.
08 CSS 基本語法 8-1 CSS 的演進 8-2 CSS 樣式規則與選擇器 8-3 連結HTML 文件與CSS 樣式表
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
TQC+ JAVA全國教師研習會 PLWeb 程式設計練習平台 簡介.
Chapter 5 遞迴 資料結構導論 - C語言實作.
題目:十六對一多工器 姓名:李國豪 學號:B
第三章 堆疊與佇列的基本應用 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 環狀鏈結串列
Chapter 1 Introduction.
課程名稱:資料結構 授課老師:_____________
佇列 (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 其他型式的佇列
4.1 單項鏈結串列 4.2 環狀串列 4.3 雙向鏈結串列 4.4 鏈結串列之應用
第二章 行程管理 朱肇明 資管系 講師 大華技術學院.
2-3 基本數位邏輯處理※.
JAVA 程式設計與資料結構 第六章 輸出與輸入.
串列(List) 撰寫一串列程式.
使用VHDL設計—4位元加法器 通訊一甲 B 楊穎穆.
SQL Stored Procedure SQL 預存程序.
(Circular Linked Lists)
安裝JDK 安裝Eclipse Eclipse 中文化
堆疊簡介 遞迴 佇列 算術運算式的表示法 中序轉換為前序或後序 前序與後序轉換成中序
雲端運算的基石(2) 虛擬化技術實作(XP篇─上)
Chapter 4 堆疊和佇列 資料結構導論 - C語言實作.
資料結構使用Java 第8章 佇列(Queue).
4.1 單向鏈結串列 4.2 堆疊的加入與刪除 4.3 佇列的加入與刪除 4.4 其他型式的佇列
第三章 鏈結串列 3-1  單向鏈結串列 3-2 環狀鏈結串列 3-3 雙向鏈結串列.
Java 程式設計 講師:FrankLin.
私立南山高中 信息組 電腦研習 電腦資料的備份 中華民國 99年4月20日 星期二.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Chap3 Linked List 鏈結串列.
佇列(queue) Lai Ah Fur.
電腦攻擊與防禦 使用電腦教室VMware軟體說明.
第四章 堆疊與佇列 課前指引 資料結構學科中,堆疊(Stack)與佇列是兩種相當典型的抽象資料型態,也是一種有特定進出規則的線性串列應用,主要特性是限制了資料插入與刪除的位置和方法。本章中將會介紹堆疊與佇列的概念與特性,及在計算機領域的各種相關應用。
第一單元 建立java 程式.
Chapter 4 資料結構.
資料結構 優點 缺點 1 陣列 (Array) 沒有額外變量 (例head, next,...) 運作/操作較簡單 更新資料時,若要保持順序,需要移動較大量資料 靜態結構Static (宣告時已決定了陣列元素多少,不能在程式執行期間增減元素) 2 隊列Queue (FIFO) 容易更新 加入enqueue:
Chapter 3 堆疊與佇列 3.1 堆疊和佇列基本觀念 3.2 堆疊的機入與刪除 3.3 佇列的加入與刪除 3.4 環狀佇列
資料來源 2 網路過濾軟體之安裝說明 資料來源 2.
CH05. 選擇敘述.
挑戰C++程式語言 ──第8章 進一步談字元與字串
Chap2 Stack & Queue.
進階佇列.
Chap2 Stack & Queue.
MicroSim pspice.
資料結構使用Java 第6章 鏈結串列(Linked List).
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
陣列與結構.
第4章 堆疊和佇列 資料結構設計與C++程式應用
資料結構與C++程式設計進階 期末考 講師:林業峻 CSIE, NTU 7/ 15, 2010.
資料結構使用Java 第5章 串列程式實作.
第四組 停車場搜尋系統 第四組 溫允中 陳欣暉 蕭積遠 李雅俐.
本教學投影片係屬教科書著作之延伸,亦受著作權法之保護。
第13章 電腦解題與演算法 13-4 資料結構.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
Array(陣列) Anny
Chapter 4 Multi-Threads (多執行緒).
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

第五章 堆疊 5-1 認識佇列 5-2 佇列的應用

認識佇列 可以使用陣列或串列來建立一個佇列。不過堆疊只需一個top,指標指向堆疊頂,而佇列則必須使用front和rear兩個指標分別指向前端和尾端,如下圖所示:

佇列的工作運算 佇列是一種抽象型資料結構(Abstract Data Type, ADT),它有下列特性: 佇列五種工作定義: 具有先進先出(FIFO)的特性。 擁有兩種基本動作加入與刪除,而且使用front與rear兩個指標來分別指向佇列的前端與尾端。 CREATE 建立空佇列。 ADD 將新資料加入佇列的尾端,傳回新佇列。 DELETE 刪除佇列前端的資料,傳回新佇列。 FRONT 傳回佇列前端的值。 EMPTY 若佇列為空集合,傳回真,否則傳回偽。

佇列的陣列實作 佇列宣告為queue[20],且一開始front和rear均預設為-1(因為C語言陣列的索引從0開始),表示空佇列。 加入資料時請輸入"1",要取出資料時可輸入"2",將會直接印出佇列前端的值,要結束請按"3"。

範例程式:ch05_01.java

事件說明表 事件說明 front rear Q(1) Q(2) Q(3) Q(4) 空佇列Q data1進入 1 data1 data2進入 data1進入 1 data1 data2進入 2 data2 data3進入 3 data3 data1離開 data4進入 4 data4 data2離開 data5進入 data5無法進入

從上圖中可以發現明明在佇列中還Q(1)與Q(2)兩個空間,但新的資料data5,因為rear=n(n=4),所以會認為佇列已滿(Queue-Full),不能再加入。 這時候,您可以將佇列中資料往前挪移,移出空間讓新資料加入。

範例 5.1.1 (1).下列何者不是佇列(Queue)觀念的應用? (2).下列哪一種資料結構是線性串列? (A)作業系統的工作排程(B)輸出入的工作緩衝(C)河內塔的解決方法(D)中山高速公路的收費站收費 (2).下列哪一種資料結構是線性串列? (A)堆疊(B)佇列(C)雙向佇列(D)陣列(E)樹

範例 5.1.2 設一佇列(Queue)存於全長為N之密集串列(Dense List)Q內,HEAD、TAIL分別為其開始及結尾指標,均以nil表其為空。現欲加入一新資料(New Entry),其處理可為以下步驟,請依序回答空格部分。 1.依序按條件做下列選擇: 若(1) ,則表Q已存滿,無法做插入動作。 若HEAD為nil,則表Q內為空,可取HEAD=1,TAIL=(2) 。 若TAIL=N,則表(3) 須將Q內由HEAD到TAIL位置之資料,移至由1到(4) 之位置,並取TAIL=(5) ,HEAD=1。 2.TAIL=TAIL+1。 3.new entry移入Q內之TAIL處。 4.結束插入動作。

以鏈結串列實作佇列 佇列除了能以陣列的方式來實作外,我們也可以鏈結串列實作佇列。 在宣告佇列類別中,除了和佇列類別中相關的方法外,還必須有指向佇列前端及佇列尾端的指標,即front及rear。

範例程式: ch05_02.java

佇列的應用 佇列在電腦領域的應用也相當廣泛,例如: 如在圖形的走訪的先廣後深搜尋法(BFS),就是利用佇列。 可用於計算機的模擬(simulation);在模擬過程中,由於各種事件(event)的輸入時間不一定,可以利用佇列來反應真實狀況。 可作為CPU的工作排程(Job Scheduling)。利用佇列來處理,可達到先到先做的要求。 例如「線上同時週邊作業系統」的應用,也就是讓輸出入的資料先在高速磁碟機中完成,接下來將磁碟資料輸出到列表機是由系統軟體主動負責,這也是應用了佇列的工作原理。

環狀佇列 一種環形結構的佇列,它是以一種Q(0:n-1)的一維陣列,同時Q(0)為Q(n-1)的下一個元素。 指標front永遠以逆時鐘方向指向佇列中第一個元素的前一個位置,rear則指向佇列目前的最後位置。 一開始front和rear均預設為-1,表示為空佇列,也就是說如果front=rear則為空佇列。另外有: rear(rear+1) mod n front(front+1) mod n

上述之所以將front指向佇列中第一個元素前一個位置。 原因是環狀佇列為空佇列和滿佇列時,front和rear都會指向同一個地方,如此一來我們便無法利用front是否等於rear這個判斷式來決定到底目前是空佇列或滿佇列。

範例程式:ch05_03.java 底下我們以java語言來實作一個環狀佇列的工作運算。當要取出資料時可輸入“0”,要結束時可輸入“-1”。 執行結果:

優先佇列 為一種不必遵守佇列特性-FIFO(先進先出)的有序串列。 其中的每一個元素都賦予一個優先權(Priority),加入元素時可任意加入,但有最高優先權者(Highest Priority Out First, HPOF)則最先輸出。 在電腦中CPU的工作排程,優先權排程(Priority Scheduling, PS) 就是一種來挑選行程的「排程演算法」 (Scheduling Algotithm),也會使用到優先佇列,好比層級高的使用者,就比一般使用者擁有較高的權利。

甘特圖 設定每個P1、P2、P3、P4的優先次序值分別為2,8,6,4(此處假設數值越小其優先權越低;數值越大其優先權越高),以下就是以甘特圖(Gantt Chart)繪出優先權排程(Priority Scheduling, PS)的排班情況: 當各元素以輸入先後次序為優先權時,就是一般的佇列,假如是以輸入先後次序做為最不優先權時,此優先佇列即為一堆疊。

雙向佇列 雙向佇列(Deques)是英文名稱(Double-ends Queues)的縮寫,雙向佇列(Deque)就是一種前後兩端都可輸入或取出資料的有序串列。如下圖所示:

範例程式:ch05_04.java