queue structure
DESCRIPTION
อ.วร พจน์ พรหมจักร. Queue structure. Queues Structure. - PowerPoint PPT PresentationTRANSCRIPT
QUEUE STRUCTURE
อ.วรพจน์� พรหมจ�กร
Queues Structure
โครงสร�างการทำ�างาน์แบบค�วค�อการม�การจ�ดลำ�าด�บการเข้�าแลำะออกข้�อม�ลำอย่!างเป็#น์ลำ�าด�บ ข้�อม�ลำใดเข้�ามาก!อน์ก%จะด�าเน์�น์การก!อน์ หากข้�อม�ลำใดเข้�ามาทำ�หลำ�งก%จะด�าเน์�น์การทำ�หลำ�ง เร�ย่กลำ�กษณะข้องการด�าเน์�น์การแบบน์�(ว!า First In First Out (FIFO) หร�อเข้�าก่�อนออก่ก่�อน
ลำ�กษณะข้องค�ว โครงสร�างข้�อม�ลำแบบค�วเป็#น์โครงสร�างเชิ�ง
เส�น์แลำะไม!เชิ�งเส�น์ ม�ทำางเข้�าแลำะออก 2 ทำาง ม�การทำ�างาน์แบบลำ�าด�บ สามารถน์�าข้�อม�ลำเข้�าแลำะน์�าข้�อม�ลำออกสลำ�บก�น์
ได� ม�ลำ�าด�บการทำ�างาน์แบบเข้�าก!อน์ออกก!อน์
(FIFO)
ประเภทข้องคิ�ว มี� 3 ปรเภท คิ�วธรรมีดา (Queue) คิ�ววงก่ลมี (Circular Queue) คิ�วท��เร�ยงล�าด�บตามีคิวามีสำ�าคิ�ญ
(Priority Queue)
การด�าเน์�น์การข้องค�ว เม�,อน์�าเข้�าข้�อม�ลำจะต้�องจ�ดเร�ย่งใน์ลำ�กษณะการต้!อทำ�าย่ก�น์ ข้�อม�ลำทำ�,อย่�!ส!วน์ทำ�าย่ข้องการเก%บข้�อม�ลำ เร�ย่กว!า
Rear ข้�อม�ลำทำ�,อย่�!ส!วน์ห�วข้องการเก%บข้�อม�ลำ ซึ่/,งจะเร�ย่กว!า
Front การน์�าข้�อม�ลำเข้�าไป็ใน์ค�ว เร�ย่กว!า Insert
(Enqueue) การน์�าข้�อม�ลำออกจากค�ว เร�ย่กว!า Remove
(Dequeue)
คิ�วธรรมีดา (Queue)
Front Rear
คิ�วธรรมีดา หมีายถึ"ง คิ�วท��มี�ก่ารน�าข้�อมี#ลเข้�าทางท�ายคิ�ว (Rear) และน�าข้�อมี#ลออก่หางคิ�ว (Front) โดยถึ�าท�ายคิ�วไปอย#�ท��ต�าแหน�งท�ายสำ'ดข้องคิ�วแล�ว ถึ"งแมี�จะมี�ช่�องว�างเหล*อท��ห�วคิ�วก่+ไมี�สำามีารถึน�าข้�อมี#ลใหมี�ไปเก่+บได� จนก่ว�าจะน�าข้�อมี#ลในคิ�วออก่ให�หมีดก่�อนจ"งเร��มีน�าข้�อมี#ลใหมี�ไปเก่+บได�
คิ�วธรรมีดา (Queue)
ก่ารน�าข้�อมี#ลเข้�า Enqueue
ก่�อนน�าสำมีาช่�ก่เข้�าคิ�ว ต�องตรวจสำอบว�าคิ�วเต+มีหร*อไมี� โดยท�� ถึ�า rear = maxQ แสำดงว�าคิ�วเต+มี (เมี*�อ maxQ คิ*อข้นาดข้องคิ�ว)
ก่ารน�าข้�อมี#ลใหมี�เข้�ามีาแถึวคิอย จะเพิ่��มีเข้�ามีาด�านหล�ง
และจะน�าเข้�ามีาเร*�อย ๆ จนเต+มี หร*อเร�ยก่ว�า แถึวคิอยเต+มี (Queue Overflow)
ด�งน�/นก่ารน�าสำมีาช่�ก่เข้�าคิ�ว จ"ง เป0นก่ารเพิ่��มีคิ�าพิ่อยน1เตอร1 rear
หาก่มี�สำมีาช่�ก่ในคิ�วเพิ่�ยงคิ�าเด�ยวพิ่อยน1เตอร1 rear และ front จะเท�าก่�น
ก่ารน�าข้�อมี#ลเข้�า Enqueue
1 2 3 4
F=R=0
Queue Overflow
F R R R R
10 20 30 40
โคิรงสำร�างข้องก่ารแทนคิ�วด�วยอาร1เรย1
1 2 3 4 5 6 7 8 9 10
A B DC E
Front
Rear
พิ่*/นท��ว�าง
Front = Rear =
15
Max
ก่ารน�าข้�อมี#ลเข้�า Enqueue
1 2 3 4 5 6 7 8 9 10
A B DC E
F
Front = Rear =
110
Max
F G H I J
R R R R R R R R R
Queue Overflow
F=R=0R
Queue : Array Implementation INSERT-Q Algorithm
front = rear = 0if( rear == maxQ)
write “Overflow”else
if(front==0)front ← 1rear ← 1Q[rear] ← Item
elserear ← rear + 1 Q[rear] ← Item
หมีายเหต'Q คิ*อช่*�อคิ�ว maxQ ค�อข้น์าดข้องค�วItem ค�อข้�อม�ลำทำ�,ต้�องการเพ�,มเข้�าไป็ใน์ค�ว
ตรวจสำอบว�าคิ�วเต+มีหร*อไมี�
ตรวจสำอบว�าคิ�วว�างเปล�าหร*อไมี�
ถึ�า front = 0 แสำดงว�าคิ�วว�างเปล�า น��นคิ*อย�งไมี�มี�ข้�อมี#ล
ในคิ�ว
Queue : Array Implementation
ก่ารน�าสำมีาช่�ก่เข้�าคิ�ว (enqueue)
Empty queuefront = rear = 0
AEnqueue(A)
front
rear
A BEnqueue(B)
front
rear
Queue : Array Implementation
ก่ารน�าสำมีาช่�ก่เข้�าคิ�ว (enqueue) (ต�อ)
A B C
A B C DEnqueue (D)
front
rear
Enqueue (C)
front
rear
Enqueue (E)Error : Overflow
ก่ารน�าข้�อมี#ลออก่ Dequeue
ก่�อนน�าสำมีาช่�ก่ออก่จาก่คิ�ว ต�องตรวจสำอบด#ก่�อนว�าคิ�วว�างเปล�าหร*อไมี� โดยเง*�อนไข้ก่ารตรวจสำอบคิ*อ front = rear = 0
ข้�อมี#ลท��จะน�าออก่ก่�อนจะเป0นข้�อมี#ลท��อย#� ด�านหน�า สำามีารถึน�าข้�อมี#ลออก่เร*�อย ๆ จนไมี�มี�ข้�อมี#ล หร*อ
เร�ยก่ว�า แถึวคิอยว�าง (Queue Underflow) ด�งน�/นก่ารน�าสำมีาช่�ก่ออก่จาก่คิ�วจ"ง เป0นก่ารเพิ่��มีคิ�า
พิ่อยน1เตอร1 front
ก่ารน�าข้�อมี#ลออก่ Dequeue
1 2 3 4 5 6 7 8 9 10
A B DC E
F
Front = Rear =
1010
Max
F G H I J
F F F F F F F F RFF=R=0
Queue Underflow
ก่ารน�าข้�อมี#ลออก่ Dequeue
1 2 3 4
F=R=0
Queue UnderflowF F F RF
10 20 30 40
Queue : Array Implementation Remove-Q algorithm
if( rear == 0)write “Underflow”
elseif(front==rear)
front ← 0rear ← 0
elsefront ← front + 1
ต้รวจสอบว!าค�วว!างเป็ลำ!าหร�อไม!ต้รวจสอบว!าม�ข้�อม�ลำใน์ค�วเพ�ย่งค!าเด�ย่วหร�อไม! ซึ่/,งถ�า front =
rear แสดงว!าม�ข้�อม�ลำใน์ค�วเพ�ย่งค!าเด�ย่ว เม�,อต้�องการลำบข้�อม�ลำ
ออกจะทำ�าให�ไม!เหลำ�อข้�อม�ลำใด ๆ ใน์ค�ว จ/งทำ�าการก�าหน์ดให�ค!า front แลำะ rear ม�ค!าเป็#น์ 0 ซึ่/,งเป็#น์การ
แสดงให�เห%น์ว!าค�วว!างเป็ลำ!า
Queue : Array Implementation ก่ารน�าสำมีาช่�ก่ออก่จาก่คิ�ว (dequeue)
A B C D
dequeue
front
rear
B C D
front
rear dequeue
C D
front
rear
Queue : Array Implementation ก่ารน�าสำมีาช่�ก่ออก่จาก่คิ�ว (dequeue) (ต�อ)
dequeue D
front
rear dequeue
front = rear = 0
dequeue
Error : Underflow
คิ�ววงก่ลมี (Circular Queue)
คิ�ววงก่ลมี หมีายถึ"ง คิ�วท��ถึ#ก่ออก่แบบมีาให�มี�ล�ก่ษณะเป0นวงก่ลมีเพิ่*�อให�สำามีารถึน�าข้�อมี#ลใหมี�ไปเก่+บไว�ท��ช่�องว�างด�านหน�าคิ�วได� คิ�ววงก่ลมีออก่แบบมีาเพิ่*�อแก่�ป4ญหาคิ�วธรรมีดา
คิ�ววงก่ลมี (Circular Queue)
ล�ก่ษณะข้องคิ�วแบบวงก่ลมีเหม�อน์ค�วธรรมดาค�อม�ต้�วชิ�( 2 ต้�วค�อ front แลำะ rear ส�าหร�บแสดงต้�าแหน์!งห�วค�วแลำะทำ�าย่ค�วต้ามลำ�าด�บ
แต้กต้!างจากค�วธรรมดาค�อ ค�วธรรมดาเม�,อ rear ชิ�(อย่�!ทำ�,ต้�าแหน์!งส2ดทำ�าย่ข้องค�ว จะทำ�าให�ไม!สามารถเพ�,มข้�อม�ลำเข้�าไป็ใน์ค�วได�อ�ก ทำ�(งทำ�,บางคร�(งย่�งม�ทำ�,ว!างเหลำ�ออย่�!ก%ต้าม
Circular Queue
ลำ�กษณะข้องค�วแบบวงกลำม (ต้!อ)ค�ววงกลำมจ�ดการป็3ญหาน์�(โดย่ กรณ� rear ชิ�(อย่�!ทำ�,ต้�าแหน์!งส2ดทำ�าย่ข้องค�ว ถ�าหากม�การเพ�,มข้�อม�ลำ ค!าข้อง rear จะสามารถวน์กลำ�บมาชิ�(ย่�งต้�าแหน์!งแรกส2ดข้องค�วได�
ด�งน์�(น์ค�ววงกลำมจะสามารถเพ�,มข้�อม�ลำเข้�าไป็ใน์ค�วได� จน์กว!าค�วจะเต้%มจร�ง ๆ
Circular Queue ก่ารน�าข้�อมี#ลเข้�าคิ�ววงก่ลมี
D E
front
rear Enqueue
(A)A D E
front
rear Enqueue(B)A B D E
front
rear
Circular Queue
ก่ารน�าสำมีาช่�ก่ออก่จาก่คิ�ววงก่ลมีA B D E
front
rear Dequeue
A B E
front
rear Dequeue
A B
front
rear
F
G
H
IJ
front=1
rear=5
Circular Queue
F
G
H
IJ
front=1
rear=5
KL
M
N
OP Q
rear=12
rear=6rear=7
Enqueue
Queue is Full
Circular Queue
F
H
IJ
front=1
KL
M
N
OP Q
rear=12
Dequeue
front=2
front=3G
2 rooms available
Circular Queue
R
H
IJ
rear=1
KL
M
N
OP Q
rear=12
Enqueue
rear=2
front=3SQueue is Full
Circular Queue
subprogram enqueue (datatype newdata) 1. rear rear+1 2. if (rear == maxq) 2.1 rear 1 3. return
Array Implementation
F G H I
rear=1 front=4
J
subprogram dequeue (datatype olddata) 1. front front+1 2. if (front == maxq) 2.1 front 1 3. return
Array Implementation
F G H IJ
front=4rear=1
บางคร�(งเราพบว!า การเข้�าร�บบร�การ ไม!เป็#น์ไป็ต้ามกฎข้องค�ว เน์�,องจากได�ร�บอภิ�ส�ทำธ�7 (priority) ให�สามารถเข้�าร�บบร�การก!อน์ได� เชิ!น์ ลำ�กค�าป็ระจ�าจะได�ร�บการบร�การก!อน์ ถ/งแม�จะเข้�ามาทำ�หลำ�งลำ�กค�าจรคน์อ�,น์ทำ�,คอย่อย่�!ก%ต้าม หร�อใน์ร�าน์ถ!าย่เอกสาร ถ�าพน์�กงาน์ก�าลำ�งถ!าย่เอกสารให�ลำ�กค�าคน์หน์/,งจ�าน์วน์ 100 หน์�า แลำ�วม�ลำ�กค�าใหม!มาข้อถ!าย่เพ�ย่งแค! 2 หน์�า พน์�กงาน์ก%บร�การให�ลำ�กค�าคน์ใหม!น์�(น์ทำ�น์ทำ�
คิ�วล�าด�บคิวามีสำ�าคิ�ญ หร*อ แถึวคิอยเช่�งบ'ร�มีภาพิ่ (Priority Queue)
ใน คิ�วธรรมีดา ข้�อมี#ลท��เข้�ามีาก่�อนจะมี�สำ�ทธ�5ออก่ก่�อน (First In First Out:FIFO) อย�างไรก่+ตามี มี�บางคิร�/งท��เราต�องยก่ให�สำมีาช่�ก่บางประเภทได�ท�างานก่�อนท�/งท��มีาท�หล�ง เช่�น ก่ารให�คิ�วงานท��เล+ก่ก่ว�าได�ท�าก่�อน หร*อ ก่ารให�สำ�ทธ�พิ่�เศษแก่�ก่ารท�างานบางประเภท
คิ�วล�าด�บคิวามีสำ�าคิ�ญท�าให�เราสำามีารถึประย'ก่ต1ใช่�คิ�วได�ด�ข้"/น เน*�องจาก่เพิ่��มีก่ารให�คิวามีสำ�าคิ�ญข้องสำมีาช่�ก่ท��แตก่ต�างก่�น สำ�งผลให�เราสำามีารถึจ�ดเร�ยงคิ�วได�ใหมี�ให�เหมีาะสำมีก่�บก่ารท�างานได� เราใช่�คิ�วล�าด�บคิวามีสำ�าคิ�ญในก่ารจ�ดก่ารท�างานก่ารตรวจน�บ
คิ�วล�าด�บคิวามีสำ�าคิ�ญ หร*อ แถึวคิอยเช่�งบ'ร�มีภาพิ่ (Priority Queue)
คิ�วล�าด�บคิวามีสำ�าคิ�ญ หร*อ แถึวคิอยเช่�งบ'ร�มีภาพิ่ (Priority Queue)
ใน์การทำ�างาน์ก�บค�วแบบน์�( ต้�องม�ค!าอภิ�ส�ทำธ�7ข้องแต้!ลำะสมาชิ�กเก%บไว�ด�วย่ เพ�,อใชิ�หาต้�าแหน์!งทำ�,อย่�!ก!อน์หน์�าสมาชิ�กทำ�,ม�อภิ�ส�ทำธ�7ต้�,ากว!าแลำะต้ามหลำ�งสมาชิ�กทำ�,ม�อภิ�ส�ทำธ�7เทำ!าก�น์หร�อส�งกว!า
typedef struct { int priority; char data; } Queue; Queue priority_queue[15];
Priority Queue
1 2 3 4 5 6 7
1 1 2 3 3
A Z C D M
...
front = 1 rear = 5
Priority Queue
1 2 3 4 5 6 7
1 1 2 3 3
A Z C D M
...
front = 1 rear = 5
ต�องก่ารแทรก่ W ท��มี�อภ�สำ�ทธ�5เท�าก่�บ 2
Priority Queue
1 2 3 4 5 6 7
1 1 2 2 3 3
A Z C W D M
...
front = 1 rear = 6
หล�งแทรก่ W ท��มี�อภ�สำ�ทธ�5เท�าก่�บ 2
Priority Queue
แบบฝึ9ก่ห�ด Queue
คิ�ว (Queue) หมีายถึ"งอะไร คิ�วมี�ล�ก่ษณะท��สำ�าคิ�ญอย�างไร คิ�วแบ�งออก่เป0นก่��ประเภท อะไรบ�าง คิ�ววงก่ลมีมี�ล�ก่ษณะอย�างไร
แบบฝึ9ก่ห�ด Queue ให�พิ่�จารณาคิ�ววงก่ลมี ท��มี�จ�านวนช่�องเก่+บข้�อมี#ล 5 ช่�อง
ซึ่"�งมี�ข้�อมี#ลจ�ดเก่+บ เป0นด�งน�/
1 2 3 4 5
จงวาดร�ป็ข้องค�วต้ามการด�าเน์�น์การต้ามลำ�าด�บ ด�งต้!อไป็น์�( J เข้�ามาใน์ค�ว น์�าข้�อม�ลำออกจากค�ว น์�าข้�อม�ลำออกจากค�ว K เข้�ามาใน์ค�ว
A R E
Front Rear