Queue - เว็บไซต์บุคลากรภาควิชาวิทยาการคอมพิวเตอร์

Download Report

Transcript Queue - เว็บไซต์บุคลากรภาควิชาวิทยาการคอมพิวเตอร์

โครงสร ้างข ้อมูลแบบคิว
Queue
Queue
 คุณสมบัตท
ิ ส
ี่ ำคัญ
 เป็ นโครงสร ้างข ้อมูลแบบต่อเนือ
่ ง
 มีการทางานแบบ First in First out (FIFO)
 จะต ้องทาการเพิม
่ ข ้อมูลทางด ้านท ้าย (rear) ของ
คิว และลบข ้อมูลทางด ้านหน ้า (front) ของคิว
เท่านัน
้
 กำร implement การทางานแบบคิว อาจใช ้
Array หรือ Linked List
implement
แถวคอย
Queue
ประโยชน์ของคิว
ลักษณะของคิวเหมือนแถวคอย หรือการ
ื้ ของ
เข ้าคิวรอซอ
 เป็ นกลไกสาคัญสาหรับระบบปฏิบต
ั ก
ิ าร
่ งานไปยังเครือ
 การสง
่ งพิมพ์ในระบบ
คอมพิวเตอร์
 ระบบการจัดการจราจรทางอากาศ
 เป็ นต ้น
Queue
กำรสร ้ำงคิว
 ใช ้ pointer 2 ตัวในการลาดับคิว คือ
front และ rear
 front คือตาแหน่งทีข
่ ้อมูลออก จะอยู่
ด ้านหน ้าคิว
front
rear
 Rear คือตาแหน่งทีข
่ ้อมูลเข ้า จะอยู่
ท ้ายของคิ
ออก ว
เข้ำ
แถวคอย
Queue
ปฏิบต
ั ก
ิ ำรกับคิว
การเพิม
่ ข ้อมูลเข ้าไปในคิว
(enqueue) หรือการ insert
การนาข ้อมูลออกจากคิว
(dequeue) หรือการ delete
Queue Implementation
 Array
Linked List
Queue: Array Implementation
 ตัวอย่ำงกำรแทนคิวด้วย Array, size =
5ออก
่ A
เพิม
่ B,
เพิม
C
ลบ A
เข้ำ
front =
rear = 0
A
front =
rear = 1
A
B
front
=1
B
C
rear
=3
C
front rear
Queue : Array Implementation
่ อมู ลเข้ำในคิว(enqueue)
 กำรเพิมข้
ิ เข ้าคิว ต ้องตรวจสอบว่าคิวเต็ม
 ก่อนนาสมาชก
หรือไม่ โดยที่ ถ ้า rear = maxQ แสดงว่าคิว
เต็ม (เมือ
่ maxQ คือขนาดของคิว)
 ถ ้าคิวเต็ม (full) จะไม่สามารถนาข ้อมูลเข ้าได ้
อีก จะทาให ้เกิดการล ้นของคิว (queue overflow)
ิ เข ้าในคิว จะเข ้าทางด ้านท ้ายคิว
 การนาสมาชก
(rear)
ิ เข ้าคิว จึงเป็ นการเพิม
 ดังนัน
้ การนาสมาชก
่ ค่า
พอยน์เตอร์ rear
ิ ในคิวเพียงค่าเดียวพอยน์เตอร์
 หากมีสมาชก
Queue : Array Implementation
 INSERT-Q Algorithm
ตรวจสอบว่าคิวเต็มหรือไม่
front = rear = 0
if( rear == maxQ)
write “Overflow”
else
if(front==0)
front ← 1
rear ← 1
Q[rear] ← Item
else
rear ← rear + 1
Q[rear] ← Item
ตรวจสอบว่าคิวว่างเปล่า
หรือไม่
ถ ้า front = 0 แสดงว่าคิวว่าง
เปล่า นั่นคือยังไม่มข
ี ้อมูลใน
คิว
หมำยเหตุ
่ ว
Q คือชือคิ
maxQ คือขนาดของคิว
่ ้องการเพิมเข
่
Item คือข ้อมูลทีต
้า
ไปในคิว
Queue : Array Implementation
 กำรนำสมำชิกเข้ำคิว (enqueue)
Empty
queue
front =
rear
=0
Enqueue(
A)A
fro rea
ntEnqueue(B
r
)
fro
A
B
rea
Queue : Array Implementation
 กำรนำสมำชิกเข้ำคิว (enqueue) (ต่อ)
Enqueue
B
(C)A
fro
nt
Enqueue(
B
D)A
fro
nt
Enqueue(E
C
rea
r
C
)Error : Overflow
D
rea
r
Queue : Array Implementation
 กำรนำข้อมู ลออกจำกคิว (dequeue)
ิ ออกจากคิว ต ้องตรวจสอบ
 ก่อนนาสมาชก
ดูกอ
่ นว่าคิวว่างเปล่าหรือไม่ โดยเงือ
่ นไขการ
ตรวจสอบคือ front = rear = 0
ิ ออกไม่ได ้
 ถ ้าคิวว่าง จะไม่สามารถนาสมาชก
จะเกิดปราก
ฏการณ์ขาดแคลนคิว (queue underflow)
ิ ออกจากคิว จะทาด ้านหน ้าคิว
 การนาสมาชก
(front)
่
ิ ออกจากคิวจึงเป็ นกำรเพิม
 ดังนัน
้ การนาสมาชก
ค่ำพอยน์เตอร ์ front
Queue : Array Implementation
 DELETE-Q algorithm
ตรวจสอบว่าคิวว่างเปล่า
ตรวจสอบว่ามีข ้อมูลในคิวเพียง
หรื
ไม่อไม่ ซงึ่ ถ ้า front =
ค่าเดี
ยอ
วหรื
if( rear == 0)
write “Underflow”
rear แสดงว่ามีข ้อมูลในคิวเพียง
else
ค่าเดียว เมือ
่ ต ้องการลบข ้อมูล
if(front==rear)
ออกจะทาให ้ไม่เหลือข ้อมูลใด ๆ
front ← 0
ในคิว จึงทาการกาหนดให ้ค่า
rear ← 0
่
ึ
front
และ
rear
มี
ค
า
่
เป็
น
0
ซ
ง
else
front ← front + 1เป็ นการแสดงให ้เห็นว่าคิวว่าง
เปล่า
Queue : Array Implementation
 กำรนำสมำชิกออกจำกคิว (dequeue)
A
B
C
fro
nt
dequeue
D
rea
r
B
C
fro
nt
dequeue
D
rea
r
C
D
fro
rea
Queue : Array Implementation
 กำรนำสมำชิกออกจำกคิว (dequeue) (ต่อ)
dequeue
D
dequeue
fro rea
nt r
front =
rear = 0
dequeue
Error : Underflow
Queue: Linked List Implementation
front
A
rear
B
D
X
struct node {
char
name;
struct node *link;
}
Queue: Linked List Implementation
front
A
rear
B
D
rear
X
F
void enqueue (datatype newdata)
{ ...
rearlink = newnode;
rear = newnode;
}
X
Queue: Linked List Implementation
front
rear
A
B
D
F
char dequeue ()
{ …
deldata = frontdata;
front = front  link;
…}
X
Queue: Linked List Implementation
How to detect that a queue is
either full or empty ?
19/96
Imagine we have a queue of integer, Q, size = 6.
Draw picture of both structures after the following operations:
1. enqueue(Q,5)
2. enqueue(Q,1)
3. enqueue(Q,7)
4. enqueue(Q,3)
5. dequeue(Q)
6. dequeue(Q)
20/96
่ ี้ ภาควิชาวิทยาการ
จัดทาโดย อ.ดารารัตน์ แซล
คอมพิวเตอร์ คณะวิทยาศาสตร์
มหาวิทยาลัยสงขลานครินทร์
7. enqu
8. enqu
9. dequ
10. dequ
11. enqueue
12. enque
Queue
 คิวแบบวงกลม (Circular Queue)
 เป็ นการแก ้ปั ญหาคิวเต็ม ทัง
้ ทีย
่ ังมีเนือ
้
ทีว่ า่ งอยู่
้ำ อ
 เป็ นการใชว่เนื
้ ทีใ่ ห ้เกิดประโยชน์สงู สด
ง
D
E
fro rea
r
คิวว่ำง แต่ไม่nt
สามารถเพิ
ม
่
ข ้อมูลเข ้าไปได ้อีก
เนือ
่ งจาก rear = maxQ
Problem with Array Implementation (size = 7)
maxq
G
H
front=5
J
rear=7
Enqueue K
G
22/96
่ ี้ ภาควิชาวิทยาการ
จัดทาโดย อ.ดารารัตน์ แซล
คอมพิวเตอร์ คณะวิทยาศาสตร์
มหาวิทยาลัยสงขลานครินทร์
H
front=5
J
Error :
Overflow
rear rear=8
Circular Queue
 ลักษณะของคิวแบบวงกลม
 เหมือนคิวธรรมดาคือมีตว
ั ช ี้ 2 ตัวคือ
front และ rear สาหรับแสดงตาแหน่ง
และท ้ายคิวตามลาดับ
 แตกต่างจากคิวธรรมดาคือ คิวธรรมดา
ี้ ยูท
เมือ
่ rear ชอ
่ ต
ี่ าแหน่งสดท ้ายของคิว
จะทาให ้ไม่สามารถเพิม
่ ข ้อมูลเข ้าไปใน
คิวได ้อีก ทัง้ ทีบ
่ างครัง้ ยังมีทวี่ า่ ง
เหลืออยูก
่ ็ตาม
Circular Queue
ลักษณะของคิวแบบวงกลม (ต่อ)
 คิววงกลมจัดการปั ญหานีโ
้ ดย กรณี rear
ี้ ยูท
ชอ
่ ต
ี่ าแหน่งสดท ้ายของคิว ถ ้าหาก
มีการเพิม
่ ข ้อมูล ค่าของ rear จะ
ี้ ังตาแหน่งแรกสด
สามารถวนกลับมาชย
ของคิวได ้
 ดังนัน
้ คิววงกลมจะสามารถเพิม
่ ข ้อมูล
เข ้าไปในคิวได ้ จนกว่าคิวจะเต็มจริง ๆ
Circular Queue
 กำรนำข้อมู ลเข้ำคิววงกลม
D
E
fro rea
Enqueue(nt r
A
D
E
A)
rea
fro
r
nt
Enqueue(B
D
)A B
rea
fro
E
Circular Queue
 กำรนำสมำชิกออกจำกคิววงกลม
A
B
D
E
rea fro
r
nt
Dequeue
A
B
rea
r
Dequeue
A
fro
B
rea
E
fro
nt
front=1
F
G
H
I
J
27/96
่ ี้ ภาควิชาวิทยาการ
จัดทาโดย อ.ดารารัตน์ แซล
คอมพิวเตอร์ คณะวิทยาศาสตร์
มหาวิทยาลัยสงขลานครินทร์
rear=5
rear=12
front=1
P
Q
O
F
Enqueue
N
G
Queue is Full
H
M
I
L
K
28/96
J
rear=7 rear=6 rear=5
่ ี้ ภาควิชาวิทยาการ
จัดทาโดย อ.ดารารัตน์ แซล
คอมพิวเตอร์ คณะวิทยาศาสตร์
มหาวิทยาลัยสงขลานครินทร์
rear=12
front=1
P
Q
front=2
F
O
Dequeue
N
G
M
H
front=3
I
L
K
J
2 rooms available
29/96
่ ี้ ภาควิชาวิทยาการ
จัดทาโดย อ.ดารารัตน์ แซล
คอมพิวเตอร์ คณะวิทยาศาสตร์
มหาวิทยาลัยสงขลานครินทร์
rear=12
rear=1
P
Q
rear=2
R
O
Enqueue
N
S
Queue is Full
H
M
I
L
K
30/96
่ ี้ ภาควิชาวิทยาการ
จัดทาโดย อ.ดารารัตน์ แซล
คอมพิวเตอร์ คณะวิทยาศาสตร์
มหาวิทยาลัยสงขลานครินทร์
J
front=3
Array Implementation
J
F
G
H
I
rear=1
front=4
subprogram enqueue (datatype newdata)
1. rear  rear+1
2. if (rear == maxq)
2.1 rear  1
3. return
31/96
่ ี้ ภาควิชาวิทยาการ
จัดทาโดย อ.ดารารัตน์ แซล
คอมพิวเตอร์ คณะวิทยาศาสตร์
มหาวิทยาลัยสงขลานครินทร์
Array Implementation
J
rear=1
F
G
H
I
front=4
subprogram dequeue (datatype olddata)
1. front  front+1
2. if (front == maxq)
2.1 front  1
3. return
32/96
่ ี้ ภาควิชาวิทยาการ
จัดทาโดย อ.ดารารัตน์ แซล
คอมพิวเตอร์ คณะวิทยาศาสตร์
มหาวิทยาลัยสงขลานครินทร์
How can we know that
a circular queue (array
and linked list) is
empty or full ?
33/96
่ ี้ ภาควิชาวิทยาการ
จัดทาโดย อ.ดารารัตน์ แซล
คอมพิวเตอร์ คณะวิทยาศาสตร์
มหาวิทยาลัยสงขลานครินทร์
Imagine we have a Circular queue of integer, Q, size = 6.
Draw picture of both structures after the following operations:
1. enqueue(Q,5)
2. enqueue(Q,1)
3. enqueue(Q,7)
4. enqueue(Q,3)
5. dequeue(Q)
6. dequeue(Q)
34/96
่ ี้ ภาควิชาวิทยาการ
จัดทาโดย อ.ดารารัตน์ แซล
คอมพิวเตอร์ คณะวิทยาศาสตร์
มหาวิทยาลัยสงขลานครินทร์
7. enqu
8. enqu
9. dequ
10. dequ
11. enqueue
12. enque
35/96
บางครัง้ เราพบว่า การเข ้ารับบริการ ไม่
เป็ นไปตามกฎของคิว
เนือ
่ งจากได ้รับ
ิ ธิ์ (priority) ให ้สามารถเข ้ารับบริการ
อภิสท
่
ก่อนได ้ เชน
ลูกค ้าประจาจะได ้รับการ
บริการก่อน ถึงแม ้จะเข ้ามาทีหลังลูกค ้าจร
คนอืน
่ ทีค
่ อยอยูก
่ ็ตาม
หรือในร ้านถ่าย
เอกสาร ถ ้าพนักงานกาลังถ่ายเอกสารให ้
ลูกค ้าคนหนึง่ จานวน 100 หน ้า แล ้วมี
ลูกค ้าใหม่มาขอถ่ายเพียงแค่
2
หน ้า
่ ี้ ภาควิชาวิทยาการ
จัดทาโดย อ.ดารารัตน์ แซล
คอมพิวเตอร์ คณะวิทยาศาสตร์
มหาวิทยาลัยสงขลานครินทร์
ในการทางานกับคิวแบบนี้
ต ้องมีคา่
ิ ธิข
ิ เก็บไว ้ด ้วย เพือ
อภิสท
์ องแต่ละสมาชก
่
้
ิ ทีม
ใชหาต
าแหน่งทีอ
่ ยูก
่ อ
่ นหน ้าสมาชก
่ ี
ิ ธิต
ิ ทีม
อภิสท
์ า่ กว่าและตามหลังสมาชก
่ ี
ิ ธิเ์ ท่ากันหรือสูงกว่า
อภิสท
 typedef struct { int
36/96
priority;
char data;
}่ ี้ ภาควิ
Queue;
จัดทาโดย อ.ดารารัตน์ แซล
ชาวิทยาการ
คอมพิวเตอร์ คณะวิทยาศาสตร์
Queue priority_queue[15];
มหาวิทยาลัยสงขลานครินทร์
1
2
3
4
5
1
1
2
3
3
A
Z
C
D
M
front = 1
37/96
่ ี้ ภาควิชาวิทยาการ
จัดทาโดย อ.ดารารัตน์ แซล
คอมพิวเตอร์ คณะวิทยาศาสตร์
มหาวิทยาลัยสงขลานครินทร์
6
rear = 5
7
...
1
2
3
4
5
1
1
2
3
3
A
Z
C
D
M
front = 1
6
7
...
rear = 5
่ อภิสท
์ ำกับ
ต้องกำรแทรก W ทีมี
ิ ธิเท่
38/96
่ ี้ ภาควิชาวิทยาการ
จัดทาโดย อ.ดารารัตน์ แซล
คอมพิวเตอร์ คณะวิทยาศาสตร์
มหาวิทยาลัยสงขลานครินทร์
1
2
3
4
5
6
1
1
2
2
3
3
A
Z
C
W
D
M
front = 1
7
...
rear = 6
่ อภิสท
์ ำกับ 2
หลังแทรก W ทีมี
ิ ธิเท่
39/96
่ ี้ ภาควิชาวิทยาการ
จัดทาโดย อ.ดารารัตน์ แซล
คอมพิวเตอร์ คณะวิทยาศาสตร์
มหาวิทยาลัยสงขลานครินทร์
Imagine we have a priority queue of integer, Q size = 5.
Draw picture of both structures after the following
operations:
operation (Q, pri, data)
1. enqueue(Q,1,7)
7. enqueue(Q,3,1)
2. enqueue(Q,1,4)
8. dequeue(Q,x)
3. enqueue(Q,3,3)
9. dequeue(Q,y)
4. dequeue(Q,x)
10. enqueue(Q,2,y)
5. enqueue(Q,2,9)
11.
enqueue(Q,3,x)
6. enqueue(Q,1,x)
12. enqueue(Q,2,2)
40/96
่ ี้ ภาควิชาวิทยาการ
จัดทาโดย อ.ดารารัตน์ แซล
คอมพิวเตอร์ คณะวิทยาศาสตร์
มหาวิทยาลัยสงขลานครินทร์
Array Implementation
Linked List Implementation
41/96
่ ี้ ภาควิชาวิทยาการ
จัดทาโดย อ.ดารารัตน์ แซล
คอมพิวเตอร์ คณะวิทยาศาสตร์
มหาวิทยาลัยสงขลานครินทร์
Which kind of implementation
either array or linked list that
we should choose for Priority
Queue Implementation?
42/96
่ ี้ ภาควิชาวิทยาการ
จัดทาโดย อ.ดารารัตน์ แซล
คอมพิวเตอร์ คณะวิทยาศาสตร์
มหาวิทยาลัยสงขลานครินทร์
Imagine we have a priority circular queue of integer, Q
size = 5.
Draw picture of both structures after the following
operations:
1. enqueue(Q,1,7)
2. enqueue(Q,1,4)
3. enqueue(Q,3,3)
4. dequeue(Q,x)
5. enqueue(Q,2,9)
6. enqueue(Q,1,x)
43/96
่ ี้ ภาควิชาวิทยาการ
จัดทาโดย อ.ดารารัตน์ แซล
คอมพิวเตอร์ คณะวิทยาศาสตร์
มหาวิทยาลัยสงขลานครินทร์
7. enqueue(Q,3,1)
8. dequeue(Q,x)
9. dequeue(Q,y)
10. enqueue(Q,2,y)
11. enqueue(Q,3,x)
12. enqueue(Q,2,2)
่
่
กำรกระทำสิงใดๆที
ขำดศี
ลธรรม
คุณธรรม และมนุ ษยธรรม
่ อ
่ ันตรำยต่อผู ค
ย่อมเป็ นสิงที
้ น สังคม
และประเทศชำติ
44/96
่ งเก่
้ งและ
คนเก่งมีเยอะ แต่คนทีทั
้ั
ดีนนหำยำก
่ ี้ ภาควิชาวิทยาการ
จัดทาโดย อ.ดารารัตน์ แซล
คอมพิวเตอร์ คณะวิทยาศาสตร์
มหาวิทยาลัยสงขลานครินทร์