佇列(queue) Lai Ah Fur.

Slides:



Advertisements
Similar presentations
第一讲:导论 The Introduction  哲学与中国哲学  哲学与哲学史  中国哲学史的历史.
Advertisements

河內塔(Hanoi)問題.
動畫與遊戲設計 Data structure and artificial intelligent
就業安全與相關法規 成之約 博士 國立政治大學勞研所 教授.
物质的组成、性质及变化 物质的组成 构成物质的微粒 微粒间的相互作用 物质的分类 按状态分类 按组成分类 物质的性质 物理性质 化学性质.
设计模式可以帮助我们改善系统的设计,增强 系统的健壮性、可扩展性,为以后铺平道路。
資料結構與C++程式設計進階 資料結構概論 講師:林業峻 CSIE, NTU 6/ 7, 2010.
Chapter 6 同步 (Synchronization)
第7单元 面向过程编程—— 继承与多态.
書名 Java於資料結構與演算法之實習應用
Tree(樹) 什麼是「樹」? 「樹」的範例 「樹」的定義 「樹」的表示法.
第三章 堆疊與佇列的基本應用 3-1 簡介堆疊(Stack) 3-2 迷宮問題研究 3-3 佇列(queue)的介紹
Linked List Operations
單向鏈結串列 Singly Linked Lists.
第6章 佇列(Queues) 6-1 佇列的基礎 6-2 佇列的表示法 6-3 環狀佇列 6-4 雙佇列.
佇列 (Queue).
佇列與推疊 (Queue and Stack)
4.4 佇列 特徵: c b a c b d c b 新增 d 刪除 入口 入口 入口 尾端(rear) 尾端(rear) 尾端(rear)
資料結構 第5章 佇列.
講師:郭育倫 第3章 基本資料結構 講師:郭育倫
親愛的老師您好 感謝您選用本書作為授課教材,博碩文化準備本書精選簡報檔,特別摘錄重點提供給您授課專用。 說明: 博碩文化:
Chap 3 堆疊與佇列 Stack and Queue.
第二章 行程管理 朱肇明 資管系 講師 大華技術學院.
Chapter 6 Graph Chang Chi-Chung
程式語言 -Visual Basic 變數、常數與資料型態.
第8章 列舉器與集合 注意: 本投影片僅供本書上課教師使用,非經同意請勿上網轉載或供拷貝.
Ch13 集合與泛型 物件導向程式設計(2).
·线性表的定义及ADT ·线性表的顺序存储结构 ·线性表的链接存储结构 · 单向循环链表 · 双链表、双向循环链表 · 一元多项式的加法
哈夫曼编码.
第六章 继承性和派生类 胡昊 南京大学计算机系软件所.
第十五章 Linked List, Stack and Queue
Ch.3 栈和队列 黄刘生 中国科学技术大学计算机系 国家高性能计算中心(合肥)
4 堆疊與佇列 4.1 前言 四種基本的資料結構 (可儲存資料的容器) 陣列 (Array)、串列(List): 最基本
cn/~dongeliu/dsa.html 刘 东 信息学院6系 中国科学技术大学
第4章 物件導向分析與設計簡介 4-1 物件導向的軟體系統開發 4-2 物件導向分析與設計 4-3 UML的物件導向分析與設計
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
第三章 进程互斥与同步 进程通信 Communication.
第十章 C高级程序应用—链表* 10.1链表的基本概念 10.2单向链表 10.3双向链表 10.4应用举例.
第3章 堆栈和队列 堆栈 堆栈应用 队列 队列应用 优先级队列 主要知识点.
第三章 栈与队列 £3.1 栈 £3.3 队列 £3.2 栈的应用举例 £3.1.1 栈的定义 £3.1.2 栈的顺序存储结构
第三章 栈和队列.
数据结构 Data Structure 中南大学 主讲人:王国军,郑瑾 中南大学信息院计科系
第 六 章 鏈結串列(Link List) 課程名稱:資料結構 授課老師:________ 2019/1/2.
資料結構與C++程式設計進階 堆疊與佇列(Stack & Queue) 講師:林業峻 CSIE, NTU 6/ 21, 2010.
五、链 表 1、单链表 2、双向链表 3、链表应用.
数据结构 -Maple Related- 牟克典 数学科学学院信息科学系 2012秋季 1/16/2019.
第三章 栈和队列.
严蔚敏、吴伟民编著 清华大学出版社 学习网站:
第四章 堆疊與佇列 課前指引 資料結構學科中,堆疊(Stack)與佇列是兩種相當典型的抽象資料型態,也是一種有特定進出規則的線性串列應用,主要特性是限制了資料插入與刪除的位置和方法。本章中將會介紹堆疊與佇列的概念與特性,及在計算機領域的各種相關應用。
樹 2 Michael Tsai 2013/3/26.
第三章 链表 单链表 (Singly Linked List) 循环链表 (Circular List) 多项式及其相加
Chapter6 队列(Queues) The Abstract Data Type
第三章 链表 单链表 循环链表 多项式及其相加 双向链表 稀疏矩阵.
常宝宝 北京大学计算机科学与技术系 数据结构(三) 常宝宝 北京大学计算机科学与技术系
第五章 递归与广义表 递归的概念 递归过程与递归工作栈 递归与回溯 广义表.
第二章 Java基本语法 讲师:复凡.
top b top a a top 空栈 a 进栈 b 进栈 top top e e e top d d d c c c b b b a a
資料結構與C++程式設計進階 實作練習 講師:林業峻 CSIE, NTU 6/ 24, 2010.
Linked Lists Prof. Michael Tsai 2013/3/12.
Chap2 Stack & Queue.
第四章 栈和队列 栈 ( Stack ) 队列 ( Queue ) 优先队列 (Priority Queue) 小结.
1. 志明打算就客戶服務開發一個語音互動(IVR)系統, 顧客可透過電話鍵盤與系統進行互動。
問題解決與流程圖 高慧君 台北市立南港高中 2006年12月22日.
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
第二章 Java基本语法 讲师:复凡.
解析算法与枚举算法.
第2章 Java语言基础.
Chapter 2 Entity-Relationship Model
Q1 以下是10個初生嬰兒,首6個月的體重改變紀錄
資料結構與C++程式設計進階 C++與資料結構 講師:林業峻 CSIE, NTU 7/ 5, 2010.
Presentation transcript:

佇列(queue) Lai Ah Fur

Queue(非circular queue) Q:array [o..n-1] of item; Procedure addqueue(item:items) Begin if rear==n then queuefull; rear=rear+1; q[rear]=item; end

Procedure delqueue(item:items) Begin if rear==front then queueEmpty; front=front+1; item=q[front]; end

Drawback 遇到時,必須把array前端資料往前移,以空出多餘空間. Waste time!

Circular queue Procedure addqueue(item:items) Begin rear=(rear+1) mod n; if rear==front then queuefull; q[rear]=item; end

Procedure delqueue(item:items) Begin if rear==front then queueEmpty; front=(front+1) mod n; item=q[front]; end

Drawback front rear Empty 只能存放n-1個元素 6 8 2 15 11 10 front rear Full

Overcome”只能存放n-1個元素” Procedure addqueue(item:items) Begin if flag then queuefull; else begin rear=(rear+1) mod n; q[rear]=item; if rear==front then flag=true; //if full end Procedure delqueue(item:items) if rear==front and not flag then queueEmpty; front=(front+1) mod n; item=q[front]; if flag then tag=false; //cancel empty End

4 2 15 11 10 6 8 10 6 8 4 2 15 11 2 4 8 2 4 8 6 first last last first first last 6 (a) (b) Enqueue(6) (d) (e) 6 8 4 2 15 11 10 (c) (f) Circular queue

Implement Queue by linked-list public class QueueNode { public Object info; public QueueNode next = null; public QueueNode(Object el) { info = el; }

public class Queue { private QueueNode head, tail; public Queue() { head = tail = null; } public boolean isEmpty() { return head == null;

public void clear() { head = tail = null; } public Object firstEl() { return head.info; public void enqueue(Object el) { if (!isEmpty()) { tail.next = new QueueNode(el); tail = tail.next; else head = tail = new QueueNode(el); public Object dequeue() { // remove the head and return its info; if (!isEmpty()) { Object el = head.info; if (head == tail) else head = head.next; return el; else return null;

雙向dequeue 前、後端均可存取元素 亦可為circular dequeue

多重queue 多個queue同時放在一個一維array上 2個queue 1 n …… …… front1 rear2 front2

Q (J-1)th queue b b[i] f[i] .. Q-length f r[i] Jth queue Q-length:每 Queue所分配 部分陣列的長 度 r

Procedure add_multQ(I,x:integer) Begin front=f[i]-b[i]; rear=r[i]-b[i]; rear=(rear+1) mod Q-length; If front==rear then Quesufull; Else begin q[rear+b[i]]=x; r[i]=rear+b[i]; End end f[i]存放ith queue之front指標,b[i]存放ith queue之base指標; r[i]存放ith queue之rear指標

Procedure del_multQ(I,x:integer) Begin front=f[i]-b[i]; rear=r[i]-b[i]; If front==rear then Quesufull; Else begin front=(front+1)mod Q-length; x=q[front+b[i]]; f[i]=front+b[i]; End end

佇列(queue)的應用 佇列結構在計算機上的應用也相當廣泛,譬如: job scheduling:計算機的作業系統裏,若所有的工作優先權(priority)都相同,則採用佇列(queue)來安排工作程序(job scheduling),使其達到先到先做的特性。 計算機的模擬(simulation),模擬是一種評估的技術,評估者建立一套電腦化系統評估模式,將真實情況藉由一種抽象模式,以分析、瞭解各種因素的影響,而在模擬的過程中,常有event-driven或time-driven的輸入訊號,由於其輸入時間不一,因此使用queue來反映真實的情況。 做為輸出入工作緩衝區(buffer);例如spooling,是先將輸入資料寫在磁碟上,再輸入電腦處理,處理後的輸出資料亦先寫在磁碟上,再由列表機印出,也是採用佇列(queue)的特性來完成。 Graph之breadth first search