Queue Sanchai Yeewiyom School of Information & Communication Technology University of Phayao
2 Queue A queue’s behavior is characterized as first in, first out (FIFO). Exp. การจัด queue ในการพิมพ์ของ network printer หรือการทำงานของ queue ใน operating system นำไปใช้ในเรื่อง simulation เช่น การ จำลองการหาเวลาที่น้อยที่สุดในการรอ
3 Queue Implementation Array Based Implementation Linear Queue Circular Queue Pointer Based Implementation Linear Queue Circular Queue
4 Array Based Implementation Linear Queue ABC frontrear
5 Linear Queue (Array Based) Insert ABCD front rear
6 Linear Queue (Array Based) Delete BCD front rear
7 Linear Queue (Array Based) Exp. Declaration and Initialize of Linear Queue const int max_queue = 5; typedef..(desired type).. queueitemtype; queueitemtype item[max_queue]; int front, rear; front = 0; rear = -1;
8 Linear Queue (Array Based) Insert const int max_queue = 5; int item[max_queue]; int front, rear; front = 0; rear = -1;
Linear Queue (Array Based) void q_insert (int x) { if (rear == max_queue – 1) { cout << “Queue Full” << endl; } else { rear ++; item[rear] = x; } 9
10 Linear Queue (Array Based) Delete
Linear Queue (Array Based) int q_delete (int& y) { if (rear < front) { cout << “Queue Empty” << endl; } else { y = item[front]; if (front == rear) { front = 0; rear = -1; } else { front ++; } return (y); } 11
12 Circular Queue (Array Based) Exp. Initialize Circular Queue front = 0; rear = max_queue – 1; count = 0;
13 Circular Queue (Array Based) max_queue =
14 Circular Queue (Array Based) การคำนวณเมื่อวนมาถึงตัวสุดท้ายของ queue rear = (rear + 1) % max_queue;
15 Circular Queue (Array Based) Exp. Add (Insert), Remove (Delete) from Queue
16 Pointer Based Implementation Linear Queue front rear
17 Linear Queue (Pointer Based) Add (Insert) front rear p
18 Linear Queue (Pointer Based) Add (Insert)
19 Linear Queue (Pointer Based) Remove (Delete) rear front temp front
20 Linear Queue (Pointer Based) Remove (Delete)
21 Circular Linked Queue Add (like a CLL) 58 rear newfrontptr rear
22 Circular Linked Queue Add newfrontptr -> next = rear -> next; rear -> next = newfrontptr; rear = newfrontptr;
23 Circular Linked Queue Add
24 Circular Linked Queue Remove 1058 frontptr rear
25 Circular Linked Queue Remove frontptr = rear -> next; y = frontptr -> data; rear -> next = frontptr -> next; frontptr -> next =null; delete frontptr; frontptr = null;
26 Circular Linked Queue Remove
Bank Transaction Time Application of Queue 27
28 Application of Queue Exp. การคำนวณระยะเวลาที่ใช้ในการรอ คอยของลูกค้าแต่ละคน ในการใช้บริการ Teller ของธนาคารแห่งหนึ่ง ซึ่งมีข้อมูล ดังนี้ เวลาที่มาถึงเวลาที่ใช้ในการรับบริการ คนที่ คนที่ คนที่ คนที่ 4 303
Application of Queue Result of Simulation 29
Application of Queue Instance of Event List 30
Application of Queue Trace of Bank Simulation 31
ตามหลักการของคิว ข้อมูลที่เข้ามาก่อนจะมี สิทธิ์ออกก่อน (First In First Out:FIFO) อย่างไรก็ตาม มีบางครั้งที่เราต้องให้ข้อมูล บางประเภทได้ทำงานก่อนทั้งที่มาทีหลัง เนื่องจากได้รับอภิสิทธิ์ (priority) เช่น การ จัดคิวการเข้ารักษาของผู้ป่วยใน โรงพยาบาลตามความรุนแรง หรือกรณี ลูกค้าประจำจะได้รับการบริการก่อน ถึงแม้ จะเข้ามาทีหลัง เป็นต้น คิวลำดับความสำคัญ หรือ แถวคอยเชิงบุริมภาพ (Priority Queue)
ในการทำงานกับคิวแบบนี้ ต้องมีค่า อภิสิทธิ์ของแต่ละสมาชิกเก็บไว้ด้วย เพื่อ ใช้หาตำแหน่งที่อยู่ก่อนหน้าสมาชิกที่มี อภิสิทธิ์ต่ำกว่าและตามหลังสมาชิกที่มี อภิสิทธิ์เท่ากันหรือสูงกว่า typedef struct { int priority; char data; } Queue; Queue priority_queue[15]; Priority Queue
... front = 0 rear = 4 Priority Queue
... front = 0 rear = 4 ต้องการแทรก W ที่มีอภิสิทธิ์เท่ากับ 2 Priority Queue
... front = 0 rear = 5 หลังแทรก W ที่มีอภิสิทธิ์เท่ากับ 2 Priority Queue