Queue.

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
Stack.
Advertisements

แถวคอย (Queue).
Data structure & Algorithms
บรรยายครั้งที่ 3: Queue
Linked-List (รายการโยง)
คิวQueue Circular Queue.
โครงสร้างข้อมูลแบบคิว
คิว ลักษณะการทำงานของ Queue การดำเนินการของ Queue การตรวจสอบ Queue
สแตค(stack) โครงสร้างข้อมูลแบบ Stack - การสร้าง Stack
คิว (Queue) Queue ADT Queue เป็น List ชนิดหนึ่ง แต่สำหรับ queue การแทรกข้อมูลลงบน queue (Insertion) จะทำที่ปลายใดปลายหนึ่งของ Queue ในขณะที่การลบข้อมูลออกจากคิว.
List ADTs By Pantharee S..
บทที่ 5 Link List Link List.
Linked List List is group of nodes that consists of data and link.
21 August ดรุณี ศมาวรรตกุล 1 2. ADT List - Unsorted list ADT - list implementation - Sorted List - Circular list - Doubly linked list.
วิชา COSC2202 โครงสร้างข้อมูล (Data Structure)
Java collection framework
โครงสร้างข้อมูล Queues
stack #1 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
Int isEmpty ( node **ptr_head) ; parameter ชื่อของตัวแปรลิสต์ที่จะตรวจสอบว่า ว่างหรือไม่ return value มีได้ 2 สถานะ คือ ว่าง (1) หรือ ไม่ ว่าง (0) body.
บทที่ 5 การควบคุมทิศทางการทำงานของโปรแกรม
JSP ติดต่อฐานข้อมูล.
DATA STRUCTURE AND ALGORITHM Linked List.
1.
Linked List (2) Sanchai Yeewiyom School of Information & Communication Technology University of Phayao.
หลักการโปรแกรม 1 Lecture 8: การทำซ้ำ (while, do-while)
Timed Math Quiz. โปรแกรมสุ่มคำนวณเลขแข่งกับ เวลา.
รศ. ดร. บุญธีร์ เครือตราชู รศ. กฤตวัน ศิริบูรณ์ KMITL Data Structures & Algorithms : Stack & Queue 1 Stack & Queue Lecturers : Boontee Kruatrachue.
Collections. Data structures Data Structures ( โครงสร้างข้อมูล ) เกิดจากการ นำข้อมูลขั้นพื้นฐานที่แบ่งแยกไม่ได้ (atomic data type) เช่น int, char, double.
QueueQueue Lecturer : Kritawan Siriboon, Room no. 913 Text : Data Structures & Algorithm Analysis in C, C++,… Mark Allen Weiss, Addison Wesley.
Linked List ( ต่อ ) Lecturer : Kritawan Siriboon, Room no. 913 Text : Data Structures & Algorithm Analysis in C, C++,… Mark Allen Weiss, Addison Wesley.
Queue Sanchai Yeewiyom School of Information & Communication Technology University of Phayao.
ครั้งที่ 7 รีจิสเตอร์ (REGISTER). รีจิสเตอร์ (Register) รีจิสเตอร์เป็นวงจรความจำที่ใช้ในการเก็บค่า ทางไบนารี่ ใช้ในการเก็บค่าในระหว่างการ ประมวลผลโดยใช้ฟลิป.
คำสั่งควบคุมการทำงาน
Queue Lecturer : Kritawan Siriboon, Room no. 913
List, Stack, Queue 2018/9/21.
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
รายการ(List) [2] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
รายการ(List) [1] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
Mark Allen Weiss, Addison Wesley
Linked List.
Mark Allen Weiss, Addison Wesley
Queue [1] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
C# Part 0: Introduction to Revision Control
Linked List.
โครงสร้างข้อมูลและอัลกอริทึมเบื้องต้น
int isEmpty ( node **ptr_head) ;
List, Stack, Queue 2018/11/28 อ.ดร.วิษณุ โคตรจรัส.
Introduction List View Prawit Pimpisan Computer Science RERU.
รายการ(List) [3] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
STACK สแตก(stack) เป็นโครงสร้างข้อมูลแบบเชิงเส้น ที่มีการใส่ข้อมูลเข้า และนำข้อมูลออกเพียงด้านเดียว ดังนั้น ข้อมูลที่เข้าไปอยู่ใน stack ก่อนจะออกจาก stack.
QUEUE คิวจะมีโครงสร้างแบบเชิงเส้นเหมือน stack แต่แตกต่างตรงที่ queue มีตัวชี้ 2 ตัวคือ หัว(Head) และหาง(Tail) โดยการใส่ข้อมูลเข้าและนำข้อมูลออก จะมีลักษณะ.
stack #1 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
Linked List Lecturer : Kritawan Siriboon, Room no. 913
Control Statement เงื่อนไขคำสั่งในโปรแกรม ภาษา C
Queue [2] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
The Collections Framework
Java Translation Object and Class ในมุมมองคอมพิวเตอร์ Objects หรือ Instances หมายถึงวัตถุที่กำเนิดตัวตนจริงๆจากต้นแบบที่กำหนดโดยคลาส Object.
Method and Encapsulation
Linked List (ต่อ) Lecturer : Kritawan Siriboon, Room no. 913
Data Structures and Algorithms 2/2561
Data Structures & Algorithms Using Python
บทที่ 7 การประมวลผลอาร์เรย์
2 โครงสร้างข้อมูลแบบสแตก (STACK).
3 โครงสร้างข้อมูลแบบคิว (QUEUE).
Chapter 3 : Array.
Array: One Dimension Programming I 9.
4 โครงสร้างข้อมูลแบบลิงค์ลิสต์ (LINKED LIST).
การเขียนโปรแกรมด้วยภาษาไพทอน การเขียนโปรแกรมแบบทางเลือก
Stack (Push Down Stack)
Sequence Diagram.
ใบสำเนางานนำเสนอ:

Queue

Queue Queue ? http://www.gograph.com/vector-clip-art/queue.html

front head rear tail FIFO List FirstInFirstOut enQueue (insert) deQueue (delete) enQueue (insert) I need some ! Where should I go ? Next ! Oh my turn  Who ?

Queue Implementations (Python) list Implementation (Python) deque (double-ended queue) Linked Queue (Subset of Linked List)

Logical Abstract Data Type Logical ADT : Data : ของมีลำดับ มีปลาย หัว front ท้าย rear Methods : init() init empty queue enQueue(i) insert i ที่ rear / tail i = deQueue() return + เอาของที่ front / head ออก b = isEmpty() queue empty ? b = isFull() queue full ? i = size() return จำนวนของใน queue front rear deQueue FIFO First in First out enQueue

Data : ของมีลำดับ มีปลายหัว ท้าย Methods : init() init empty Q Queue Implementation Logical ADT : Data : ของมีลำดับ มีปลายหัว ท้าย Methods : init() init empty Q enQueue(i) insert i ที่ rear i = deQueue() return + เอาของที่ front ออก b = isEmpty() Q empty ? b = isFull() Q full ? i = size() return จำนวนของใน Q Data Implementation ? Python List front rear deQueue enQueue Q = [] FIFO First in First out Q.append(i) ใส่ท้าย i = Q.pop(0) อันแรก Q == [] ? list expansion -> Python List implementation i = len(Q)

Queue Data Implementation __init__() : constructor ให้ค่าตั้งต้น 2 underscores 2 underscores

Data Implementation : __init__() self คือ object ที่เรียก method ในแต่ละครั้ง เช่น q = Queue() self หมายถึง q เสมือนเรียก q = Queue(q) self จะถูก pass เป็น arg. ตัวแรก โดยอัตโนมัติ Data Implementation : __init__() 1. Data Implementation : Queue แถวคอย มีปลาย หัว ท้าย -> Python List ทำใน constructor __init__() docstring : ใน triple quote print(Queue.__doc__)  docstring class Queue: """ class Queue create empty Queue """ def __init__(self): self.items = [] constructor : ใช้ define Instance Attributes ได้ ในตัวอย่างนี้มี attribute เดียวคือ items constructor function ถูกเรียกโดยอัตโนมัติเมื่อ instantiate instance ใหม่ instantiate instance (object) ใหม่ โดยไม่ pass argument q = Queue() print(q.items) items : Instance Attributes สำหรับแต่ละ instance []

Default Argument default argument ถ้าไม่มีการ pass arg. มา list = None class Queue: """ class Queue default : empty Queue/ Queue([list]) """ def __init__(self, list = None): if list == None: self.items = [] else: self.items = list default argument ถ้าไม่มีการ pass arg. มา list = None ถ้า pass arg. มา list = ตัวที่ pass มา Object None ใช้เช็ค obj identity q = Queue() print(q.items) q1 = Queue(['A', 'B', 'C']) print(q1.items) [] ['A', 'B', 'C'] ไม่เหมือนกับ C++ & Java ใน Python ไม่สามารถมี constructor หลายตัวได้

Queue Operation Implementation 2. Methods : 1. __init__() : ให้ค่าตั้งต้น 2. ใส่ enQueue() : ด้านท้าย rear 3. เอาออก deQueue () : ด้านหัว front 4. isEmpty() : queue ว่าง ? 5. size() : มีของกี่อัน

A B C enQueue() ใน class Queue: def enQueue(self, i): front/head rear/tail ใน class Queue: def enQueue(self, i): self.items.append(i) # insert i ที่ท้าย list q = Queue() print(q.items) q.enQueue('A') q.enQueue('B') q.enQueue('C') [] ['A'] rear/tail front/head A B C ['A', 'B'] ['A', 'B', 'C' ]

A B deQueue() ใน class Queue: def deQueue(self): front/head rear/tail return self.item.pop(0) # pop out index 0 deQueue must check Queue Underflow print(q.items) print(q.deQueue()) q.deQueue() ['A', 'B'] front/head rear/tail A A B ['B'] 0 1 B [] # error # Queue Underflow

isQEmpty? False Q Empty เมื่อไหร่ ? isEmpty() ใน class Queue: def isEmpty(self): return self.items == [] #return len(self.items) == 0 Q Empty เมื่อไหร่ ? A B print(q.items) print(q.isEmpty()) ['A', 'B'] false

size() = ? 2 ไง size() ใน class Queue: def size(self): return len(self.items) A B print(q.items) print(q.size()) ['A', 'B'] 2

Insert / Delete ทั้ง 2 ปลาย ใช้ deque ถูกกว่า (double-end queue) Python list Internal Python List : ข้างใน เป็น array : index ต่อกัน memory ติดกัน L = [ 1, 3, 5, 7, 9 ] Insert / Delete ต้นๆ list แพง O(n) shift out / shift in 1 2 3 4 L 1 3 5 7 9 print(L) [1, 3, 5, 7, 9] L.pop(0) 1 Insert / Delete ทั้ง 2 ปลาย ใช้ deque ถูกกว่า (double-end queue) ข้างใน : doubly linked list (เรียนในเรื่องถัดไป) print(L) [3, 5, 7, 9] L.insert(0,2) print(L) [2, 3, 5, 7, 9] insert ต้น list : ต้องทำอะไรบ้าง ?

Python deque (double-ended queue) ข้างใน เป็น doubly linked list Operation Average Case Amortized Worst Case Copy O(n) append O(1) appendleft pop popleft extend O(k) extendleft rotate remove Insert / Delete ทั้ง 2 ปลาย ถูก O(1) https://wiki.python.org/moin/TimeComplexity

Queue Implementations (Python) List Implementation (Python) deque (double-ended queue) Linked Queue (Subset of Linked List)

Queue Implementation using Python deque (double-ended queue) enQueue front rear >>> d.append('g') >>> d.append('h') >>> d deque(['d', 'e', 'f', 'g', 'h']) append() deQueue d e f g h popleft() >>> pop1 = d.popleft() >>> pop2 = d.popleft() >>> d deque(['f', 'g', 'h']) >>> from collections import deque >>> d = deque('def') >>>d deque(['d', 'e', 'f']) >>> print(pop1, pop2) d e >>> len(d) 3 >>> dd = deque() >>> dd deque([])

Queue() : Python deque (double-ended queue) class Queue: # use deque def __init__(self): def enQueue(self, i): def dequeue(self): def isEmpty(self): def size(self): from collections import deque front/head rear/tail self.items = deque() Try Make Your Own deque Queue

Test Your deque Queue 1. สร้าง list อะไรก็ได้ เช่น [5, 7, 6, 3, 8, 4] 2. สร้าง q โดยใช้ class ที่สร้างขึ้นในหน้าที่แล้ว 2. loop enqueue element ใน list พร้อม print q 3. loop dequeue ทีละตัวจนหมด พิมพ์ของที่เอาออก และ q ที่เหลือ

Queue() : Python deque (double-ended queue) from collections import deque class Queue: # use deque def __init__(self): def enQueue(self, i): def dequeue(self): def isEmpty(self): def size(self): front/head rear/tail self.items = deque() self.items.append(i) return self.items.popleft() return len(self.items) == 0 return len(self.items)

Queue Implementations (Python) List Implementation (Python) deque (double-ended queue) Linked Queue (Subset of Linked List)

unfix positions order? Linked List link Logical linked list Implicit Array Sequential Array 3 15 1 7 4 3 L 1 Problem : fix positions 7 1 2 3 4 L A 15 NODE B C D Linked List คำว่า Logical หมายความว่าในความคิดของเรา เช่น link แทนด้วยลูกศร แทนการเชื่อมโยงกัน ในการ implement จริง (physical) ลูกศรอาจเป็นได้หลายอย่าง เช่น pointer หรือ index ของ array link Logical linked list

Linked Queue front rear front rear Every operations ? front rear How do they link? Support every operations ? front rear enQueue ? (insert) deQueue ? (delete) Every operations ?