4.4 佇列 特徵: c b a c b d c b 新增 d 刪除 入口 入口 入口 尾端(rear) 尾端(rear) 尾端(rear)

Slides:



Advertisements
Similar presentations
我的未来不是梦 攀枝花市经贸旅游学校. 1. 文中案例王萍苦恼的原因是 什么? 2. 你有哪些办法可以帮助王萍? 导入 思考  谁来帮帮她?
Advertisements

消費者委員會 研究及商營手法事務主任 麥詠詩女士
消費者委員會 研究及商營手法事務主任 麥詠詩女士
動畫與遊戲設計 Data structure and artificial intelligent
四資二甲 第三週作業 物件導向程式設計.
第7单元 面向过程编程—— 继承与多态.
書名 Java於資料結構與演算法之實習應用
Tree(樹) 什麼是「樹」? 「樹」的範例 「樹」的定義 「樹」的表示法.
Linked List Operations
單向鏈結串列 Singly Linked Lists.
第6章 佇列(Queues) 6-1 佇列的基礎 6-2 佇列的表示法 6-3 環狀佇列 6-4 雙佇列.
C#程序设计 c# programming 泛型 C#程序设计课程组.
佇列 (Queue).
佇列與推疊 (Queue and Stack)
資料結構設計與C++程式應用 Fundamentals of Data Structures and Their Applications Using C++ 第3章 佇列 資料結構設計與C++程式應用.
資料結構 第5章 佇列.
Chapter8 Binary and Other Trees
親愛的老師您好 感謝您選用本書作為授課教材,博碩文化準備本書精選簡報檔,特別摘錄重點提供給您授課專用。 說明: 博碩文化:
Chap 3 堆疊與佇列 Stack and Queue.
Ch13 集合與泛型 物件導向程式設計(2).
哈夫曼编码.
第12章 樹狀搜尋結構 (Search Trees)
第六章 继承性和派生类 胡昊 南京大学计算机系软件所.
第十五章 Linked List, Stack and Queue
4 堆疊與佇列 4.1 前言 四種基本的資料結構 (可儲存資料的容器) 陣列 (Array)、串列(List): 最基本
程序设计期末复习 黎金宁
cn/~dongeliu/dsa.html 刘 东 信息学院6系 中国科学技术大学
第2章 线性表 线性表抽象数据类型 顺序表 主要知识点 单链表 循环单链表 循环双向链表 静态链表 设计举例.
第十章 C高级程序应用—链表* 10.1链表的基本概念 10.2单向链表 10.3双向链表 10.4应用举例.
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
第3章 堆栈和队列 堆栈 堆栈应用 队列 队列应用 优先级队列 主要知识点.
第三章 栈与队列 £3.1 栈 £3.3 队列 £3.2 栈的应用举例 £3.1.1 栈的定义 £3.1.2 栈的顺序存储结构
第三章 栈和队列.
第 六 章 鏈結串列(Link List) 課程名稱:資料結構 授課老師:________ 2019/1/2.
資料結構與C++程式設計進階 堆疊與佇列(Stack & Queue) 講師:林業峻 CSIE, NTU 6/ 21, 2010.
第一章 绪论.
五、链 表 1、单链表 2、双向链表 3、链表应用.
陈海明 副教授 信息学院 计算机系 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系
樹狀結構 Tree Structure chapter 7 德明科技大學資訊科技系.
Data Structure.
佇列(queue) Lai Ah Fur.
集合框架和泛型(一).
第三章 栈和队列.
資料結構 第4章 堆疊.
第四章 堆疊與佇列 課前指引 資料結構學科中,堆疊(Stack)與佇列是兩種相當典型的抽象資料型態,也是一種有特定進出規則的線性串列應用,主要特性是限制了資料插入與刪除的位置和方法。本章中將會介紹堆疊與佇列的概念與特性,及在計算機領域的各種相關應用。
樹 2 Michael Tsai 2013/3/26.
Chapter6 队列(Queues) The Abstract Data Type
陈海明 副教授 信息学院 计算机系 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系
二叉树的遍历.
自我參考結構 (self-reference – 1)
第三章 链表 单链表 循环链表 多项式及其相加 双向链表 稀疏矩阵.
辅导课程八.
常宝宝 北京大学计算机科学与技术系 数据结构(三) 常宝宝 北京大学计算机科学与技术系
第五章 递归与广义表 递归的概念 递归过程与递归工作栈 递归与回溯 广义表.
Linked Lists Prof. Michael Tsai 2013/3/12.
Chap2 Stack & Queue.
第四章 栈和队列 栈 ( Stack ) 队列 ( Queue ) 优先队列 (Priority Queue) 小结.
資料結構使用Java 第9章 樹(Tree).
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
資料結構簡介 綠園.
第 六 讲 栈和队列(一).
中国农业科学院博士后学术论坛 博士后基金申请的经验及体会 中国农业科学院生物技术研究所 秦 华 博士
第四章 函数 丘志杰 电子科技大学 计算机学院 软件学院.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
Data Structure.
Chapter 2 Entity-Relationship Model
Q1 以下是10個初生嬰兒,首6個月的體重改變紀錄
資料結構與C++程式設計進階 C++與資料結構 講師:林業峻 CSIE, NTU 7/ 5, 2010.
13-1 電腦可以協助解決哪些問題 13-2 電腦解題簡介 13-3 電腦解題規劃-演算法 13-4 認識資料結構
Presentation transcript:

4.4 佇列 特徵: c b a c b d c b 新增 d 刪除 入口 入口 入口 尾端(rear) 尾端(rear) 尾端(rear) 4.4 佇列 特徵: 入口 入口 入口 新增 d 刪除 c b a c b d c b 尾端(rear) 尾端(rear) 尾端(rear) 頭端(front) 頭端(front) 頭端(front) 出口 出口

4.4.1 以陣列實作佇列 2

4.4.1 以陣列實作佇列—移動門 (ch4_queue_1.java) 適用於限量服務,不適合不限量、但座位有限的服務 優點:簡單 缺點:還有空位卻認為已滿 解決方法:當有 remove 動作時,搬移資料,讓剩下的所有佇列資料都由陣列索引位置 0 開始 或參考 4.5.5 環狀 佇列

4.4.2以串列實作佇列(ch4_queue_2.java) class Node { int data; Node link; } class Queue { Node front; Node rear;

4.4.2以串列實作佇列(ch4_queue_2.java)

4.4.2以串列實作佇列(ch4_queue_2.java) 基本動作如下: 建立一個 空佇列:生成 front 跟 rear 節點,而且兩者的 link 都是 null void add(int data): 生成新節點,將 data 值存在此節點,依 佇列是否為空,分別處理(第 4 頁投影片) int remove( ): 刪除並傳回佇列頭端資料 int getfront( ): 傳回頭端資料 int getrear( ): 傳回尾端資料 boolean empty( ): 傳回佇列是否為空之布林值 練習: int getlength():傳回長度 如果想以串列實作,但又要限制佇列長度(最多為 n),則可以檢查 getlength() 是否等於 n ,來判斷是否佇列已滿

4.5 變形堆疊和變形佇列 4.5.1, 4.5.2 多重堆疊,多重佇列 [課本這兩節跳過] 重新設計: 課本:將一陣列切成 3 段,每段實作一堆疊(佇列),當某一堆 疊(佇列)滿了,其他堆疊(佇列)還有空間時,需重新分配,處 理起來太複雜。其實可以用之前設計之 Stack 或 Queue 來實作 。 重新設計: class ThreeStack { Stack s1; Stack s2; Stack s3; int s1_max_size; //optional int s2_max_size; //optional int s3_max_size; //optional void push(int i, int data) int pop(int i) boolean full(int i) boolean empty(int i) } class ThreeQueue { Queue q1; Queue q2; Queue q3; int q1_max_size; //optional int q2_max_size; //optional int q3_max_size; //optional void add(int i, int data) int remove(int i) boolan full(int i) boolean empty(int i) } 如果對堆疊容量有設限

4.5.1, 4.5.2 多重堆疊,多重佇列(重新設計,補充) 也可擴充為可變長度之多重堆疊 (ch4_MultiStack.java) 其方法 (以多重堆疊為例:ch4_threestack.java) 建構子: 初始化 3 個堆疊 void push(int i, int data): 新增資料 data 到第 i 個堆疊 int pop(int i): 由第 i 個堆疊取出資料(要移除) boolean full(int i): 檢查第 i 個堆疊是否滿了 (對堆疊容量 有設限時才需要) boolean empty(int i):檢查第 i 個堆疊是否為空 也可擴充為可變長度之多重堆疊 (ch4_MultiStack.java) 建構子:以整數陣列代表需要新增的堆疊的各個長度限 制

4.5.3 優先佇列 課本作法 1:將一陣列切成 3 段,每段實作一佇列, 由左到右分級 課本作法 2:以鍊結串列

4.5.3 優先佇列 (補充) 重新設計: 視為一個佇列,由 3 個佇列實作,新增時可 設定要加入第幾個佇列。移除時會由 q1, q2, q3 依續移 除 常用於服務有分等級時,例如 q1 為頭等艙旅客,q2 為商務艙旅客,q3 為經濟艙旅客。 add 表示旅客到達櫃台排隊。 remove 表示請排在最前面旅客到櫃台接受服務 (但需依照等級) class PriorityQueue { Queue q1; Queue q2; Queue q3; int q1_max_size; int q2_max_size; int q3_max_size; void add(int i, int data) int remove( ) boolan full( ) boolean empty( ) } 練習: 請畫出經過以下動作後,各佇列內容: add(1, 1)、add(2,2)、add(3,3)、add(2,4)、 remove()、remove()、remove()、add(1,5)、 remove()

4.5.4 雙向佇列 (DQueue) 課本:將一個陣列切成 2 半 重新設計 class DQueue { Queue q1; int max_size; //兩個佇列長度和 void add(int i, int data) int remove(int i ) boolan full( ) boolean empty( ) { return q1.empty() && q2.empty(); }

4.5.5以陣列實作環狀佇列(ch4_cqueue.java) 4.4.1 以陣列實作佇列的缺點 改進的想法: 當有 remove 動作時,搬移資料,讓剩下的所有佇列資料 都由陣列索引位置 0 開始 (作業) 將陣列的頭尾相接,以利用空出來的位置

4.5.5 環狀佇列 (ch4_cqueue.java)

4.5.5 環狀佇列

作業 為了使用陣列來實作 “不限量、但座位有限” 的佇列 服務,請改進 ch4_queue_1.java 還有空位卻認為 已滿的缺點,當有 remove 動作時,搬移陣列資料 ,讓剩下的所有佇列資料都由陣列索引位置 0 開始 ( 由於以上這個特性,這樣的佇列不需要 front )。請 改寫 ch4_queue_1.java 所有方法,並加以測試。 請以堆疊陣列完成 可變長度之多重堆疊的相關方法 ,並加以測試 完成 優先佇列 的相關方法,並加以測試