1 / 41

Queue structure

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

nami
Download Presentation

Queue structure

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. อ.วรพจน์ พรหมจักร Queue structure

  2. Queues Structure โครงสร้างการทำงานแบบคิวคือการมีการจัดลำดับการเข้าและออกข้อมูลอย่างเป็นลำดับ ข้อมูลใดเข้ามาก่อนก็จะดำเนินการก่อน หากข้อมูลใดเข้ามาทีหลังก็จะดำเนินการทีหลัง เรียกลักษณะของการดำเนินการแบบนี้ว่า First In First Out (FIFO) หรือเข้าก่อนออกก่อน

  3. ลักษณะของคิว • โครงสร้างข้อมูลแบบคิวเป็นโครงสร้างเชิงเส้นและไม่เชิงเส้น • มีทางเข้าและออก 2 ทาง • มีการทำงานแบบลำดับ • สามารถนำข้อมูลเข้าและนำข้อมูลออกสลับกันได้ • มีลำดับการทำงานแบบเข้าก่อนออกก่อน (FIFO)

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

  5. การดำเนินการของคิว เมื่อนำเข้าข้อมูลจะต้องจัดเรียงในลักษณะการต่อท้ายกัน • ข้อมูลที่อยู่ส่วนท้ายของการเก็บข้อมูล เรียกว่า Rear • ข้อมูลที่อยู่ส่วนหัวของการเก็บข้อมูล ซึ่งจะเรียกว่า Front • การนำข้อมูลเข้าไปในคิว เรียกว่า Insert (Enqueue) • การนำข้อมูลออกจากคิว เรียกว่า Remove (Dequeue)

  6. คิวธรรมดา (Queue) Rear Front

  7. คิวธรรมดา (Queue) • คิวธรรมดา หมายถึง คิวที่มีการนำข้อมูลเข้าทางท้ายคิว (Rear)และนำข้อมูลออกหางคิว (Front) โดยถ้าท้ายคิวไปอยู่ที่ตำแหน่งท้ายสุดของคิวแล้ว ถึงแม้จะมีช่องว่างเหลือที่หัวคิวก็ไม่สามารถนำข้อมูลใหม่ไปเก็บได้ จนกว่าจะนำข้อมูลในคิวออกให้หมดก่อนจึงเริ่มนำข้อมูลใหม่ไปเก็บได้

  8. การนำข้อมูลเข้า Enqueue • ก่อนนำสมาชิกเข้าคิว ต้องตรวจสอบว่าคิวเต็มหรือไม่ โดยที่ ถ้า rear = maxQแสดงว่าคิวเต็ม (เมื่อ maxQคือขนาดของคิว) • การนำข้อมูลใหม่เข้ามาแถวคอย จะเพิ่มเข้ามาด้านหลัง • และจะนำเข้ามาเรื่อย ๆ จนเต็ม หรือเรียกว่า แถวคอยเต็ม (Queue Overflow) • ดังนั้นการนำสมาชิกเข้าคิว จึง เป็นการเพิ่มค่าพอยน์เตอร์rear • หากมีสมาชิกในคิวเพียงค่าเดียวพอยน์เตอร์rear และ front จะเท่ากัน

  9. การนำข้อมูลเข้า Enqueue Queue Overflow 10 30 20 40 F=R=0 F R R R R

  10. โครงสร้างของการแทนคิวด้วยอาร์เรย์โครงสร้างของการแทนคิวด้วยอาร์เรย์ Max E A B C D พื้นที่ว่าง Front Rear Front = Rear = 1 5

  11. การนำข้อมูลเข้า Enqueue Max G H I J E F A B C D F=R=0 F R R R R R R R R R R Queue Overflow Front = Rear = 1 10

  12. Queue : Array Implementation ตรวจสอบว่าคิวเต็มหรือไม่ ตรวจสอบว่าคิวว่างเปล่าหรือไม่ ถ้า front = 0 แสดงว่าคิวว่างเปล่า นั่นคือยังไม่มีข้อมูลในคิว หมายเหตุ Q คือชื่อคิว maxQคือขนาดของคิว Item คือข้อมูลที่ต้องการเพิ่มเข้าไปในคิว 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

  13. Queue : Array Implementation Empty queue front = rear = 0 Enqueue(A) front front rear rear Enqueue(B) การนำสมาชิกเข้าคิว (enqueue)

  14. Queue : Array Implementation Enqueue (C) Enqueue (D) front front rear rear Enqueue (E) Error : Overflow การนำสมาชิกเข้าคิว (enqueue) (ต่อ)

  15. การนำข้อมูลออก Dequeue • ก่อนนำสมาชิกออกจากคิว ต้องตรวจสอบดูก่อนว่าคิวว่างเปล่าหรือไม่ โดยเงื่อนไขการตรวจสอบคือ front = rear = 0 • ข้อมูลที่จะนำออกก่อนจะเป็นข้อมูลที่อยู่ ด้านหน้า • สามารถนำข้อมูลออกเรื่อย ๆ จนไม่มีข้อมูล หรือเรียกว่า แถวคอยว่าง (Queue Underflow) • ดังนั้นการนำสมาชิกออกจากคิวจึง เป็นการเพิ่มค่าพอยน์เตอร์front

  16. การนำข้อมูลออก Dequeue Max G H I J E F A B C D F=R=0 F F F F F F R F F F F Queue Underflow Front = Rear = 10 10

  17. การนำข้อมูลออก Dequeue 10 40 20 30 F=R=0 F F F F R Queue Underflow

  18. Queue : Array Implementation ตรวจสอบว่าคิวว่างเปล่าหรือไม่ ตรวจสอบว่ามีข้อมูลในคิวเพียงค่าเดียวหรือไม่ ซึ่งถ้า front = rear แสดงว่ามีข้อมูลในคิวเพียงค่าเดียว เมื่อต้องการลบข้อมูลออกจะทำให้ไม่เหลือข้อมูลใด ๆ ในคิว จึงทำการกำหนดให้ค่า front และ rear มีค่าเป็น 0 ซึ่งเป็นการแสดงให้เห็นว่าคิวว่างเปล่า Remove-Q algorithm if( rear == 0) write “Underflow” else if(front==rear) front ← 0 rear ← 0 else front ← front + 1

  19. Queue : Array Implementation dequeue front rear rear front front rear dequeue การนำสมาชิกออกจากคิว (dequeue)

  20. Queue : Array Implementation dequeue dequeue front = rear = 0 front rear dequeue Error : Underflow การนำสมาชิกออกจากคิว (dequeue) (ต่อ)

  21. คิววงกลม (Circular Queue) คิววงกลม หมายถึง คิวที่ถูกออกแบบมาให้มีลักษณะเป็นวงกลมเพื่อให้สามารถนำข้อมูลใหม่ไปเก็บไว้ที่ช่องว่างด้านหน้าคิวได้ คิววงกลมออกแบบมาเพื่อแก้ปัญหาคิวธรรมดา

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

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

  24. Circular Queue Enqueue(A) front front rear rear rear front Enqueue(B) การนำข้อมูลเข้าคิววงกลม

  25. Circular Queue Dequeue front rear front rear rear front Dequeue การนำสมาชิกออกจากคิววงกลม

  26. front=1 F G H I J rear=5 Circular Queue

  27. rear=12 rear=7 rear=6 rear=5 Circular Queue front=1 P Q O F Enqueue G N QueueisFull H M I L J K

  28. rear=12 front=1 front=3 front=2 Circular Queue P Q F O Dequeue G N H M I L J K 2 rooms available

  29. rear=12 rear=1 front=3 rear=2 Circular Queue P Q R O Enqueue S N QueueisFull H M I L J K

  30. 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

  31. 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

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

  33. คิวลำดับความสำคัญ หรือ แถวคอยเชิงบุริมภาพ(Priority Queue) • ใน คิวธรรมดา ข้อมูลที่เข้ามาก่อนจะมีสิทธิ์ออกก่อน (First In First Out:FIFO) อย่างไรก็ตาม มีบางครั้งที่เราต้องยกให้สมาชิกบางประเภทได้ทำงานก่อนทั้งที่มาทีหลัง เช่น การให้คิวงานที่เล็กกว่าได้ทำก่อน หรือ การให้สิทธิพิเศษแก่การทำงานบางประเภท • คิวลำดับความสำคัญทำให้เราสามารถประยุกต์ใช้คิวได้ดีขึ้น เนื่องจากเพิ่มการให้ความสำคัญของสมาชิกที่แตกต่างกัน ส่งผลให้เราสามารถจัดเรียงคิวได้ใหม่ให้เหมาะสมกับการทำงานได้ เราใช้คิวลำดับความสำคัญในการจัดการทำงานการตรวจนับ

  34. คิวลำดับความสำคัญ หรือ แถวคอยเชิงบุริมภาพ(Priority Queue)

  35. Priority Queue ในการทำงานกับคิวแบบนี้ ต้องมีค่าอภิสิทธิ์ของแต่ละสมาชิกเก็บไว้ด้วย เพื่อใช้หาตำแหน่งที่อยู่ก่อนหน้าสมาชิกที่มีอภิสิทธิ์ต่ำกว่าและตามหลังสมาชิกที่มีอภิสิทธิ์เท่ากันหรือสูงกว่า • typedefstruct { intpriority; chardata; } Queue; Queuepriority_queue[15];

  36. Priority Queue ... rear = 5 front = 1

  37. rear = 5 front = 1 Priority Queue ... ต้องการแทรก W ที่มีอภิสิทธิ์เท่ากับ 2

  38. rear = 6 front = 1 Priority Queue ... หลังแทรก W ที่มีอภิสิทธิ์เท่ากับ 2

  39. แบบฝึกหัด Queue • คิว (Queue) หมายถึงอะไร • คิวมีลักษณะที่สำคัญอย่างไร • คิวแบ่งออกเป็นกี่ประเภท อะไรบ้าง • คิววงกลมมีลักษณะอย่างไร

  40. แบบฝึกหัด Queue • ให้พิจารณาคิววงกลม ที่มีจำนวนช่องเก็บข้อมูล 5 ช่อง ซึ่งมีข้อมูลจัดเก็บ เป็นดังนี้ 1 2 3 4 5 จงวาดรูปของคิวตามการดำเนินการตามลำดับ ดังต่อไปนี้ • J เข้ามาในคิว • นำข้อมูลออกจากคิว • นำข้อมูลออกจากคิว • K เข้ามาในคิว Front Rear

More Related