queue structure

41
QUEUE STRUCTURE อ.ออออออ ออออออออ

Upload: nami

Post on 14-Jan-2016

66 views

Category:

Documents


0 download

DESCRIPTION

อ.วร พจน์ พรหมจักร. Queue structure. Queues Structure. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Queue structure

QUEUE STRUCTURE

อ.วรพจน์� พรหมจ�กร

Page 2: Queue structure

Queues Structure

โครงสร�างการทำ�างาน์แบบค�วค�อการม�การจ�ดลำ�าด�บการเข้�าแลำะออกข้�อม�ลำอย่!างเป็#น์ลำ�าด�บ ข้�อม�ลำใดเข้�ามาก!อน์ก%จะด�าเน์�น์การก!อน์ หากข้�อม�ลำใดเข้�ามาทำ�หลำ�งก%จะด�าเน์�น์การทำ�หลำ�ง เร�ย่กลำ�กษณะข้องการด�าเน์�น์การแบบน์�(ว!า First In First Out (FIFO) หร�อเข้�าก่�อนออก่ก่�อน

Page 3: Queue structure

ลำ�กษณะข้องค�ว โครงสร�างข้�อม�ลำแบบค�วเป็#น์โครงสร�างเชิ�ง

เส�น์แลำะไม!เชิ�งเส�น์ ม�ทำางเข้�าแลำะออก 2 ทำาง ม�การทำ�างาน์แบบลำ�าด�บ สามารถน์�าข้�อม�ลำเข้�าแลำะน์�าข้�อม�ลำออกสลำ�บก�น์

ได� ม�ลำ�าด�บการทำ�างาน์แบบเข้�าก!อน์ออกก!อน์

(FIFO)

Page 4: Queue structure

ประเภทข้องคิ�ว มี� 3 ปรเภท คิ�วธรรมีดา (Queue) คิ�ววงก่ลมี (Circular Queue) คิ�วท��เร�ยงล�าด�บตามีคิวามีสำ�าคิ�ญ

(Priority Queue)

Page 5: Queue structure

การด�าเน์�น์การข้องค�ว เม�,อน์�าเข้�าข้�อม�ลำจะต้�องจ�ดเร�ย่งใน์ลำ�กษณะการต้!อทำ�าย่ก�น์ ข้�อม�ลำทำ�,อย่�!ส!วน์ทำ�าย่ข้องการเก%บข้�อม�ลำ เร�ย่กว!า

Rear ข้�อม�ลำทำ�,อย่�!ส!วน์ห�วข้องการเก%บข้�อม�ลำ ซึ่/,งจะเร�ย่กว!า

Front การน์�าข้�อม�ลำเข้�าไป็ใน์ค�ว เร�ย่กว!า Insert

(Enqueue) การน์�าข้�อม�ลำออกจากค�ว เร�ย่กว!า Remove

(Dequeue)

Page 6: Queue structure

คิ�วธรรมีดา (Queue)

Front Rear

Page 7: Queue structure

คิ�วธรรมีดา หมีายถึ"ง คิ�วท��มี�ก่ารน�าข้�อมี#ลเข้�าทางท�ายคิ�ว (Rear) และน�าข้�อมี#ลออก่หางคิ�ว (Front) โดยถึ�าท�ายคิ�วไปอย#�ท��ต�าแหน�งท�ายสำ'ดข้องคิ�วแล�ว ถึ"งแมี�จะมี�ช่�องว�างเหล*อท��ห�วคิ�วก่+ไมี�สำามีารถึน�าข้�อมี#ลใหมี�ไปเก่+บได� จนก่ว�าจะน�าข้�อมี#ลในคิ�วออก่ให�หมีดก่�อนจ"งเร��มีน�าข้�อมี#ลใหมี�ไปเก่+บได�

คิ�วธรรมีดา (Queue)

Page 8: Queue structure
Page 9: Queue structure

ก่ารน�าข้�อมี#ลเข้�า Enqueue

ก่�อนน�าสำมีาช่�ก่เข้�าคิ�ว ต�องตรวจสำอบว�าคิ�วเต+มีหร*อไมี� โดยท�� ถึ�า rear = maxQ แสำดงว�าคิ�วเต+มี (เมี*�อ maxQ คิ*อข้นาดข้องคิ�ว)

ก่ารน�าข้�อมี#ลใหมี�เข้�ามีาแถึวคิอย จะเพิ่��มีเข้�ามีาด�านหล�ง

และจะน�าเข้�ามีาเร*�อย ๆ จนเต+มี หร*อเร�ยก่ว�า แถึวคิอยเต+มี (Queue Overflow)

ด�งน�/นก่ารน�าสำมีาช่�ก่เข้�าคิ�ว จ"ง เป0นก่ารเพิ่��มีคิ�าพิ่อยน1เตอร1 rear

หาก่มี�สำมีาช่�ก่ในคิ�วเพิ่�ยงคิ�าเด�ยวพิ่อยน1เตอร1 rear และ front จะเท�าก่�น

Page 10: Queue structure

ก่ารน�าข้�อมี#ลเข้�า Enqueue

1 2 3 4

F=R=0

Queue Overflow

F R R R R

10 20 30 40

Page 11: Queue structure

โคิรงสำร�างข้องก่ารแทนคิ�วด�วยอาร1เรย1

1 2 3 4 5 6 7 8 9 10

A B DC E

Front

Rear

พิ่*/นท��ว�าง

Front = Rear =

15

Max

Page 12: Queue structure

ก่ารน�าข้�อมี#ลเข้�า 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

Page 13: Queue structure

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 แสำดงว�าคิ�วว�างเปล�า น��นคิ*อย�งไมี�มี�ข้�อมี#ล

ในคิ�ว

Page 14: Queue structure

Queue : Array Implementation

ก่ารน�าสำมีาช่�ก่เข้�าคิ�ว (enqueue)

Empty queuefront = rear = 0

AEnqueue(A)

front

rear

A BEnqueue(B)

front

rear

Page 15: Queue structure

Queue : Array Implementation

ก่ารน�าสำมีาช่�ก่เข้�าคิ�ว (enqueue) (ต�อ)

A B C

A B C DEnqueue (D)

front

rear

Enqueue (C)

front

rear

Enqueue (E)Error : Overflow

Page 16: Queue structure

ก่ารน�าข้�อมี#ลออก่ Dequeue

ก่�อนน�าสำมีาช่�ก่ออก่จาก่คิ�ว ต�องตรวจสำอบด#ก่�อนว�าคิ�วว�างเปล�าหร*อไมี� โดยเง*�อนไข้ก่ารตรวจสำอบคิ*อ front = rear = 0

ข้�อมี#ลท��จะน�าออก่ก่�อนจะเป0นข้�อมี#ลท��อย#� ด�านหน�า สำามีารถึน�าข้�อมี#ลออก่เร*�อย ๆ จนไมี�มี�ข้�อมี#ล หร*อ

เร�ยก่ว�า แถึวคิอยว�าง (Queue Underflow) ด�งน�/นก่ารน�าสำมีาช่�ก่ออก่จาก่คิ�วจ"ง เป0นก่ารเพิ่��มีคิ�า

พิ่อยน1เตอร1 front

Page 17: Queue structure

ก่ารน�าข้�อมี#ลออก่ 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

Page 18: Queue structure

ก่ารน�าข้�อมี#ลออก่ Dequeue

1 2 3 4

F=R=0

Queue UnderflowF F F RF

10 20 30 40

Page 19: Queue structure

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 ซึ่/,งเป็#น์การ

แสดงให�เห%น์ว!าค�วว!างเป็ลำ!า

Page 20: Queue structure

Queue : Array Implementation ก่ารน�าสำมีาช่�ก่ออก่จาก่คิ�ว (dequeue)

A B C D

dequeue

front

rear

B C D

front

rear dequeue

C D

front

rear

Page 21: Queue structure

Queue : Array Implementation ก่ารน�าสำมีาช่�ก่ออก่จาก่คิ�ว (dequeue) (ต�อ)

dequeue D

front

rear dequeue

front = rear = 0

dequeue

Error : Underflow

Page 22: Queue structure

คิ�ววงก่ลมี (Circular Queue)

คิ�ววงก่ลมี หมีายถึ"ง คิ�วท��ถึ#ก่ออก่แบบมีาให�มี�ล�ก่ษณะเป0นวงก่ลมีเพิ่*�อให�สำามีารถึน�าข้�อมี#ลใหมี�ไปเก่+บไว�ท��ช่�องว�างด�านหน�าคิ�วได� คิ�ววงก่ลมีออก่แบบมีาเพิ่*�อแก่�ป4ญหาคิ�วธรรมีดา

Page 23: Queue structure

คิ�ววงก่ลมี (Circular Queue)

ล�ก่ษณะข้องคิ�วแบบวงก่ลมีเหม�อน์ค�วธรรมดาค�อม�ต้�วชิ�( 2 ต้�วค�อ front แลำะ rear ส�าหร�บแสดงต้�าแหน์!งห�วค�วแลำะทำ�าย่ค�วต้ามลำ�าด�บ

แต้กต้!างจากค�วธรรมดาค�อ ค�วธรรมดาเม�,อ rear ชิ�(อย่�!ทำ�,ต้�าแหน์!งส2ดทำ�าย่ข้องค�ว จะทำ�าให�ไม!สามารถเพ�,มข้�อม�ลำเข้�าไป็ใน์ค�วได�อ�ก ทำ�(งทำ�,บางคร�(งย่�งม�ทำ�,ว!างเหลำ�ออย่�!ก%ต้าม

Page 24: Queue structure

Circular Queue

ลำ�กษณะข้องค�วแบบวงกลำม (ต้!อ)ค�ววงกลำมจ�ดการป็3ญหาน์�(โดย่ กรณ� rear ชิ�(อย่�!ทำ�,ต้�าแหน์!งส2ดทำ�าย่ข้องค�ว ถ�าหากม�การเพ�,มข้�อม�ลำ ค!าข้อง rear จะสามารถวน์กลำ�บมาชิ�(ย่�งต้�าแหน์!งแรกส2ดข้องค�วได�

ด�งน์�(น์ค�ววงกลำมจะสามารถเพ�,มข้�อม�ลำเข้�าไป็ใน์ค�วได� จน์กว!าค�วจะเต้%มจร�ง ๆ

Page 25: Queue structure

Circular Queue ก่ารน�าข้�อมี#ลเข้�าคิ�ววงก่ลมี

D E

front

rear Enqueue

(A)A D E

front

rear Enqueue(B)A B D E

front

rear

Page 26: Queue structure

Circular Queue

ก่ารน�าสำมีาช่�ก่ออก่จาก่คิ�ววงก่ลมีA B D E

front

rear Dequeue

A B E

front

rear Dequeue

A B

front

rear

Page 27: Queue structure

F

G

H

IJ

front=1

rear=5

Circular Queue

Page 28: Queue structure

F

G

H

IJ

front=1

rear=5

KL

M

N

OP Q

rear=12

rear=6rear=7

Enqueue

Queue is Full

Circular Queue

Page 29: Queue structure

F

H

IJ

front=1

KL

M

N

OP Q

rear=12

Dequeue

front=2

front=3G

2 rooms available

Circular Queue

Page 30: Queue structure

R

H

IJ

rear=1

KL

M

N

OP Q

rear=12

Enqueue

rear=2

front=3SQueue is Full

Circular Queue

Page 31: Queue structure

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

Page 32: Queue structure

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

Page 33: Queue structure

บางคร�(งเราพบว!า การเข้�าร�บบร�การ ไม!เป็#น์ไป็ต้ามกฎข้องค�ว เน์�,องจากได�ร�บอภิ�ส�ทำธ�7 (priority) ให�สามารถเข้�าร�บบร�การก!อน์ได� เชิ!น์ ลำ�กค�าป็ระจ�าจะได�ร�บการบร�การก!อน์ ถ/งแม�จะเข้�ามาทำ�หลำ�งลำ�กค�าจรคน์อ�,น์ทำ�,คอย่อย่�!ก%ต้าม หร�อใน์ร�าน์ถ!าย่เอกสาร ถ�าพน์�กงาน์ก�าลำ�งถ!าย่เอกสารให�ลำ�กค�าคน์หน์/,งจ�าน์วน์ 100 หน์�า แลำ�วม�ลำ�กค�าใหม!มาข้อถ!าย่เพ�ย่งแค! 2 หน์�า พน์�กงาน์ก%บร�การให�ลำ�กค�าคน์ใหม!น์�(น์ทำ�น์ทำ�

คิ�วล�าด�บคิวามีสำ�าคิ�ญ หร*อ แถึวคิอยเช่�งบ'ร�มีภาพิ่ (Priority Queue)

Page 34: Queue structure

ใน คิ�วธรรมีดา ข้�อมี#ลท��เข้�ามีาก่�อนจะมี�สำ�ทธ�5ออก่ก่�อน (First In First Out:FIFO) อย�างไรก่+ตามี มี�บางคิร�/งท��เราต�องยก่ให�สำมีาช่�ก่บางประเภทได�ท�างานก่�อนท�/งท��มีาท�หล�ง เช่�น ก่ารให�คิ�วงานท��เล+ก่ก่ว�าได�ท�าก่�อน หร*อ ก่ารให�สำ�ทธ�พิ่�เศษแก่�ก่ารท�างานบางประเภท

คิ�วล�าด�บคิวามีสำ�าคิ�ญท�าให�เราสำามีารถึประย'ก่ต1ใช่�คิ�วได�ด�ข้"/น เน*�องจาก่เพิ่��มีก่ารให�คิวามีสำ�าคิ�ญข้องสำมีาช่�ก่ท��แตก่ต�างก่�น สำ�งผลให�เราสำามีารถึจ�ดเร�ยงคิ�วได�ใหมี�ให�เหมีาะสำมีก่�บก่ารท�างานได� เราใช่�คิ�วล�าด�บคิวามีสำ�าคิ�ญในก่ารจ�ดก่ารท�างานก่ารตรวจน�บ

คิ�วล�าด�บคิวามีสำ�าคิ�ญ หร*อ แถึวคิอยเช่�งบ'ร�มีภาพิ่ (Priority Queue)

Page 35: Queue structure

คิ�วล�าด�บคิวามีสำ�าคิ�ญ หร*อ แถึวคิอยเช่�งบ'ร�มีภาพิ่ (Priority Queue)

Page 36: Queue structure

ใน์การทำ�างาน์ก�บค�วแบบน์�( ต้�องม�ค!าอภิ�ส�ทำธ�7ข้องแต้!ลำะสมาชิ�กเก%บไว�ด�วย่ เพ�,อใชิ�หาต้�าแหน์!งทำ�,อย่�!ก!อน์หน์�าสมาชิ�กทำ�,ม�อภิ�ส�ทำธ�7ต้�,ากว!าแลำะต้ามหลำ�งสมาชิ�กทำ�,ม�อภิ�ส�ทำธ�7เทำ!าก�น์หร�อส�งกว!า

typedef struct { int priority; char data; } Queue; Queue priority_queue[15];

Priority Queue

Page 37: Queue structure

1 2 3 4 5 6 7

1 1 2 3 3

A Z C D M

...

front = 1 rear = 5

Priority Queue

Page 38: Queue structure

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

Page 39: Queue structure

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

Page 40: Queue structure

แบบฝึ9ก่ห�ด Queue

คิ�ว (Queue) หมีายถึ"งอะไร คิ�วมี�ล�ก่ษณะท��สำ�าคิ�ญอย�างไร คิ�วแบ�งออก่เป0นก่��ประเภท อะไรบ�าง คิ�ววงก่ลมีมี�ล�ก่ษณะอย�างไร

Page 41: Queue structure

แบบฝึ9ก่ห�ด Queue ให�พิ่�จารณาคิ�ววงก่ลมี ท��มี�จ�านวนช่�องเก่+บข้�อมี#ล 5 ช่�อง

ซึ่"�งมี�ข้�อมี#ลจ�ดเก่+บ เป0นด�งน�/

1 2 3 4 5

จงวาดร�ป็ข้องค�วต้ามการด�าเน์�น์การต้ามลำ�าด�บ ด�งต้!อไป็น์�( J เข้�ามาใน์ค�ว น์�าข้�อม�ลำออกจากค�ว น์�าข้�อม�ลำออกจากค�ว K เข้�ามาใน์ค�ว

A R E

Front Rear