โครงสร้างข้อมูลแบบคิว
Download
1 / 44

โครงสร้างข้อมูลแบบคิว - PowerPoint PPT Presentation


  • 111 Views
  • Uploaded on

โครงสร้างข้อมูลแบบคิว. Queue. Queue. คุณสมบัติที่สำคัญ เป็นโครงสร้างข้อมูลแบบต่อเนื่อง มีการทำงานแบบ First in First out (FIFO) จะต้องทำการ เพิ่มข้อมูลทางด้านท้าย (rear) ของคิว และ ลบข้อมูลทางด้านหน้า (front) ของคิวเท่านั้น การ implement การทำงานแบบคิว อาจใช้ Array หรือ Linked List.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' โครงสร้างข้อมูลแบบคิว' - brooks


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

โครงสร้างข้อมูลแบบคิวโครงสร้างข้อมูลแบบคิว

Queue


Queue
Queueโครงสร้างข้อมูลแบบคิว

  • คุณสมบัติที่สำคัญ

    • เป็นโครงสร้างข้อมูลแบบต่อเนื่อง

    • มีการทำงานแบบ First in First out (FIFO)

    • จะต้องทำการเพิ่มข้อมูลทางด้านท้าย (rear) ของคิว และลบข้อมูลทางด้านหน้า(front) ของคิวเท่านั้น

    • การ implement การทำงานแบบคิว อาจใช้ Arrayหรือ Linked List

implement

แถวคอย


Queue1
Queueโครงสร้างข้อมูลแบบคิว

  • ประโยชน์ของคิว

    ลักษณะของคิวเหมือนแถวคอย หรือการเข้าคิวรอซื้อของ

    • เป็นกลไกสำคัญสำหรับระบบปฏิบัติการ

    • การส่งงานไปยังเครื่องพิมพ์ในระบบคอมพิวเตอร์

    • ระบบการจัดการจราจรทางอากาศ

    • เป็นต้น


Queue2
Queueโครงสร้างข้อมูลแบบคิว

  • การสร้างคิว

    • ใช้ pointer 2ตัวในการลำดับคิว คือ front และ rear

    • front คือตำแหน่งที่ข้อมูลออก จะอยู่ด้านหน้าคิว

    • Rear คือตำแหน่งที่ข้อมูลเข้า จะอยู่ด้านท้ายของคิว

front

rear

ออก

เข้า

แถวคอย


Queue3
Queueโครงสร้างข้อมูลแบบคิว

  • ปฏิบัติการกับคิว

    • การเพิ่มข้อมูลเข้าไปในคิว(enqueue) หรือการ insert

    • การนำข้อมูลออกจากคิว (dequeue) หรือการ delete


Queue implementation
Queue Implementationโครงสร้างข้อมูลแบบคิว

Array

Linked List


Queue array implementation
Queue: Array Implementationโครงสร้างข้อมูลแบบคิว

  • ตัวอย่างการแทนคิวด้วย Array, size = 5

front = rear = 0

เพิ่ม A

เพิ่ม B, C

ลบ A

front = rear = 1

ออก

front = 1

rear = 3

เข้า

front = 2

rear = 3


Queue array implementation1
Queue : Array Implementationโครงสร้างข้อมูลแบบคิว

  • การเพิ่มข้อมูลเข้าในคิว(enqueue)

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

    • ถ้าคิวเต็ม (full) จะไม่สามารถนำข้อมูลเข้าได้อีก จะทำให้เกิดการล้นของคิว (queue overflow)

    • การนำสมาชิกเข้าในคิว จะเข้าทางด้านท้ายคิว (rear)

    • ดังนั้นการนำสมาชิกเข้าคิว จึงเป็นการเพิ่มค่าพอยน์เตอร์ rear

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


Queue array implementation2
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 implementation3
Queue : Array Implementationโครงสร้างข้อมูลแบบคิว

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

Empty queue

front = rear = 0

Enqueue(A)

front

front

rear

rear

Enqueue(B)


Queue array implementation4
Queue : Array Implementationโครงสร้างข้อมูลแบบคิว

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

Enqueue (C)

Enqueue(D)

front

front

rear

rear

Enqueue(E)

Error : Overflow


Queue array implementation5
Queue : Array Implementationโครงสร้างข้อมูลแบบคิว

  • การนำข้อมูลออกจากคิว (dequeue)

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

    • ถ้าคิวว่าง จะไม่สามารถนำสมาชิกออกไม่ได้ จะเกิดปรากฏการณ์ขาดแคลนคิว (queue underflow)

    • การนำสมาชิกออกจากคิว จะทำด้านหน้าคิว (front)

    • ดังนั้นการนำสมาชิกออกจากคิวจึงเป็นการเพิ่มค่าพอยน์เตอร์ front


Queue array implementation6
Queue : Array Implementationโครงสร้างข้อมูลแบบคิว

  • DELETE-Q algorithm

    if( rear == 0)

    write “Underflow”

    else

    if(front==rear)

    front ← 0

    rear ← 0

    else

    front ← front + 1

ตรวจสอบว่าคิวว่างเปล่าหรือไม่

ตรวจสอบว่ามีข้อมูลในคิวเพียงค่าเดียวหรือไม่ ซึ่งถ้า front = rear แสดงว่ามีข้อมูลในคิวเพียงค่าเดียว เมื่อต้องการลบข้อมูลออกจะทำให้ไม่เหลือข้อมูลใด ๆ ในคิว จึงทำการกำหนดให้ค่า front และ rear มีค่าเป็น 0 ซึ่งเป็นการแสดงให้เห็นว่าคิวว่างเปล่า


Queue array implementation7
Queue : Array Implementationโครงสร้างข้อมูลแบบคิว

  • การนำสมาชิกออกจากคิว (dequeue)

dequeue

front

front

front

rear

rear

rear

dequeue


Queue array implementation8
Queue : Array Implementationโครงสร้างข้อมูลแบบคิว

  • การนำสมาชิกออกจากคิว (dequeue) (ต่อ)

dequeue

dequeue

front = rear = 0

front

rear

dequeue

Error : Underflow


Queue linked list implementation

rearโครงสร้างข้อมูลแบบคิว

B

Queue: Linked List Implementation

front

A

D

X

struct node {

char name;

struct node *link;

}


Queue linked list implementation1

rearโครงสร้างข้อมูลแบบคิว

B

rear

Queue: Linked List Implementation

front

A

D

X

F

X

void enqueue (datatypenewdata)

{ ...

rearlink = newnode;

rear = newnode;

}


Queue linked list implementation2

rearโครงสร้างข้อมูลแบบคิว

A

B

Queue: Linked List Implementation

front

D

F

X

char dequeue()

{ …

deldata = frontdata;

front = front  link;

… }


Queue linked list implementation3
Queue: Linked List Implementationโครงสร้างข้อมูลแบบคิว

How to detect that a queue is either full or empty ?


Practices 1โครงสร้างข้อมูลแบบคิว

Imagine we have a queue of integer, Q, size = 6.

Draw picture of both structures after the following operations:

1. enqueue(Q,5) 7. enqueue(Q,15)

2. enqueue(Q,1) 8. enqueue(Q,6)

3. enqueue(Q,7) 9. dequeue(Q)

4. enqueue(Q,3) 10. dequeue(Q)

5. dequeue(Q) 11. enqueue(Q,10)

6. dequeue(Q) 12. enqueue(Q,9)

จัดทำโดย อ.ดารารัตน์ แซ่ลี้ ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยสงขลานครินทร์


Queue4
Queueโครงสร้างข้อมูลแบบคิว

  • คิวแบบวงกลม (Circular Queue)

    • เป็นการแก้ปัญหาคิวเต็ม ทั้งที่ยังมีเนื้อที่ว่างอยู่

    • เป็นการใช้เนื้อที่ให้เกิดประโยชน์สูงสุด

ว่าง

front

rear

คิวว่าง แต่ไม่สามารถเพิ่มข้อมูลเข้าไปได้อีก เนื่องจาก rear = maxQ


Jโครงสร้างข้อมูลแบบคิว

G

H

rear=7

front=5

front=5

rear

rear=8

rear

Problem with Array Implementation (size = 7)

maxq

Enqueue K

Error :

Overflow

J

G

H

จัดทำโดย อ.ดารารัตน์ แซ่ลี้ ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยสงขลานครินทร์


Circular queue
Circular Queueโครงสร้างข้อมูลแบบคิว

  • ลักษณะของคิวแบบวงกลม

    • เหมือนคิวธรรมดาคือมีตัวชี้ 2 ตัวคือ front และ rear สำหรับแสดงตำแหน่งหัวคิวและท้ายคิวตามลำดับ

    • แตกต่างจากคิวธรรมดาคือ คิวธรรมดาเมื่อ rear ชี้อยู่ที่ตำแหน่งสุดท้ายของคิว จะทำให้ไม่สามารถเพิ่มข้อมูลเข้าไปในคิวได้อีก ทั้งที่บางครั้งยังมีที่ว่างเหลืออยู่ก็ตาม


Circular queue1
Circular Queueโครงสร้างข้อมูลแบบคิว

  • ลักษณะของคิวแบบวงกลม (ต่อ)

    • คิววงกลมจัดการปัญหานี้โดย กรณี rear ชี้อยู่ที่ตำแหน่งสุดท้ายของคิว ถ้าหากมีการเพิ่มข้อมูล ค่าของ rear จะสามารถวนกลับมาชี้ยังตำแหน่งแรกสุดของคิวได้

    • ดังนั้นคิววงกลมจะสามารถเพิ่มข้อมูลเข้าไปในคิวได้ จนกว่าคิวจะเต็มจริง ๆ


Circular queue2
Circular Queueโครงสร้างข้อมูลแบบคิว

  • การนำข้อมูลเข้าคิววงกลม

Enqueue(A)

front

front

front

rear

rear

rear

Enqueue(B)


Circular queue3
Circular Queueโครงสร้างข้อมูลแบบคิว

  • การนำสมาชิกออกจากคิววงกลม

Dequeue

front

front

front

rear

rear

rear

Dequeue


front=โครงสร้างข้อมูลแบบคิว1

F

G

H

I

J

rear=5

Circular Queue

จัดทำโดย อ.ดารารัตน์ แซ่ลี้ ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยสงขลานครินทร์


rear=1โครงสร้างข้อมูลแบบคิว2

rear=7

rear=5

rear=6

Circular Queue

front=1

P

Q

O

F

Enqueue

G

N

Queue is Full

H

M

I

L

J

K

จัดทำโดย อ.ดารารัตน์ แซ่ลี้ ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยสงขลานครินทร์


rear=1โครงสร้างข้อมูลแบบคิว2

front=1

front=3

front=2

Circular Queue

P

Q

F

O

Dequeue

G

N

H

M

I

L

J

K

2 rooms available

จัดทำโดย อ.ดารารัตน์ แซ่ลี้ ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยสงขลานครินทร์


rear=1โครงสร้างข้อมูลแบบคิว2

rear=1

front=3

rear=2

Circular Queue

P

Q

R

O

Enqueue

S

N

Queue is Full

H

M

I

L

J

K

จัดทำโดย อ.ดารารัตน์ แซ่ลี้ ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยสงขลานครินทร์


Array Implementationโครงสร้างข้อมูลแบบคิว

J

F

G

H

I

rear=1

front=4

subprogram enqueue (datatypenewdata)

1. rear  rear+1

2. if (rear == maxq)

2.1 rear  1

3. return

จัดทำโดย อ.ดารารัตน์ แซ่ลี้ ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยสงขลานครินทร์


Array Implementationโครงสร้างข้อมูลแบบคิว

J

F

G

H

I

rear=1

front=4

subprogram dequeue (datatypeolddata)

1. front  front+1

2. if (front == maxq)

2.1 front  1

3. return

จัดทำโดย อ.ดารารัตน์ แซ่ลี้ ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยสงขลานครินทร์


Questionโครงสร้างข้อมูลแบบคิว

How can we know that a circular queue (array and linked list) is empty or full ?

จัดทำโดย อ.ดารารัตน์ แซ่ลี้ ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยสงขลานครินทร์


Practices 2โครงสร้างข้อมูลแบบคิว

Imagine we have a Circular queue of integer, Q, size = 6.

Draw picture of both structures after the following operations:

1. enqueue(Q,5) 7. enqueue(Q,15)

2. enqueue(Q,1) 8. enqueue(Q,6)

3. enqueue(Q,7) 9. dequeue(Q)

4. enqueue(Q,3) 10. dequeue(Q)

5. dequeue(Q) 11. enqueue(Q,10)

6. dequeue(Q) 12. enqueue(Q,9)

จัดทำโดย อ.ดารารัตน์ แซ่ลี้ ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยสงขลานครินทร์


Priority Queueโครงสร้างข้อมูลแบบคิว

บางครั้งเราพบว่า การเข้ารับบริการ ไม่เป็นไปตามกฎของคิว เนื่องจากได้รับอภิสิทธิ์ (priority) ให้สามารถเข้ารับบริการก่อนได้เช่น ลูกค้าประจำจะได้รับการบริการก่อน ถึงแม้จะเข้ามาทีหลังลูกค้าจรคนอื่นที่คอยอยู่ก็ตาม หรือในร้านถ่ายเอกสาร ถ้าพนักงานกำลังถ่ายเอกสารให้ลูกค้าคนหนึ่งจำนวน 100 หน้า แล้วมีลูกค้าใหม่มาขอถ่ายเพียงแค่ 2 หน้า พนักงานก็บริการให้ลูกค้าคนใหม่นั้นทันที

จัดทำโดย อ.ดารารัตน์ แซ่ลี้ ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยสงขลานครินทร์


Priority Queueโครงสร้างข้อมูลแบบคิว

ในการทำงานกับคิวแบบนี้ ต้องมีค่าอภิสิทธิ์ของแต่ละสมาชิกเก็บไว้ด้วย เพื่อใช้หาตำแหน่งที่อยู่ก่อนหน้าสมาชิกที่มีอภิสิทธิ์ต่ำกว่าและตามหลังสมาชิกที่มีอภิสิทธิ์เท่ากันหรือสูงกว่า

  • typedef struct { int priority;

    char data;

    } Queue;

    Queue priority_queue[15];

จัดทำโดย อ.ดารารัตน์ แซ่ลี้ ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยสงขลานครินทร์


Priority Queueโครงสร้างข้อมูลแบบคิว

...

rear = 5

front = 1

จัดทำโดย อ.ดารารัตน์ แซ่ลี้ ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยสงขลานครินทร์


rear = โครงสร้างข้อมูลแบบคิว5

front = 1

Priority Queue

...

ต้องการแทรก W ที่มีอภิสิทธิ์เท่ากับ 2

จัดทำโดย อ.ดารารัตน์ แซ่ลี้ ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยสงขลานครินทร์


rear = โครงสร้างข้อมูลแบบคิว6

front = 1

Priority Queue

...

หลังแทรก W ที่มีอภิสิทธิ์เท่ากับ 2

จัดทำโดย อ.ดารารัตน์ แซ่ลี้ ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยสงขลานครินทร์


Practices 4โครงสร้างข้อมูลแบบคิว

Imagine we have a priority queueof 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)

จัดทำโดย อ.ดารารัตน์ แซ่ลี้ ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยสงขลานครินทร์


Priority Queueโครงสร้างข้อมูลแบบคิว

  • Array Implementation

  • Linked List Implementation

จัดทำโดย อ.ดารารัตน์ แซ่ลี้ ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยสงขลานครินทร์


Priority Queueโครงสร้างข้อมูลแบบคิว

Which kind of implementation either array or linked list that we should choose for Priority Queue Implementation?

จัดทำโดย อ.ดารารัตน์ แซ่ลี้ ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยสงขลานครินทร์


Practices 5โครงสร้างข้อมูลแบบคิว

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) 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)

จัดทำโดย อ.ดารารัตน์ แซ่ลี้ ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยสงขลานครินทร์


การกระทำสิ่งใดๆที่ขาดศีลธรรม คุณธรรม และมนุษยธรรม

ย่อมเป็นสิ่งที่อันตรายต่อผู้คน สังคม และประเทศชาติ

คนเก่งมีเยอะ แต่คนที่ทั้งเก่งและดีนั้นหายาก

จัดทำโดย อ.ดารารัตน์ แซ่ลี้ ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยสงขลานครินทร์


ad