งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

คิว (Queue) Queue ADT Queue เป็น List ชนิดหนึ่ง แต่สำหรับ queue การแทรกข้อมูลลงบน queue (Insertion) จะทำที่ปลายใดปลายหนึ่งของ Queue ในขณะที่การลบข้อมูลออกจากคิว.

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "คิว (Queue) Queue ADT Queue เป็น List ชนิดหนึ่ง แต่สำหรับ queue การแทรกข้อมูลลงบน queue (Insertion) จะทำที่ปลายใดปลายหนึ่งของ Queue ในขณะที่การลบข้อมูลออกจากคิว."— ใบสำเนางานนำเสนอ:

1 คิว (Queue) Queue ADT Queue เป็น List ชนิดหนึ่ง แต่สำหรับ queue การแทรกข้อมูลลงบน queue (Insertion) จะทำที่ปลายใดปลายหนึ่งของ Queue ในขณะที่การลบข้อมูลออกจากคิว (Deletion) จะกระทำที่อีกปลายหนึ่งของ List 25 June AM Week 08 - Queue

2 คิว (Queue) การดำเนินการ (Operation) พื้นฐานบนคิว Enqueue
คือการ Insert สมาชิกลงไปที่ด้านปลายของ List ซึ่งเรียกว่าตำแหน่ง Rear Dequeue คือการ Delete และ Return ค่าสมาชิกที่ด้านหัว List ซึ่งเรียกว่าตำแหน่ง Front 25 June AM Week 08 - Queue

3 ลักษณะของ Queue (Abstract Model of a Queue)
การดำเนินการทุกอย่างบน Queue ไม่ว่าจะเกิดจากการสร้างโดยใช้ Array หรือการสร้างโดยใช้ List ก็ตาม ล้วนมี running time เป็น O(1) ซึ่งน้อยมากๆ 25 June AM Week 08 - Queue

4 การสร้าง Queue โดยใช้ Array (Array Implementation of Queue)
สำหรับโครงสร้างข้อมูลแบบ Queue แต่ละตัวเราต้องเก็บค่าต่างๆของ Queue ดังนี้ queue[ ] อาร์เรย์เก็บค่าสมาชิกแต่ละตัวในคิว front ตำแหน่งปลายด้านหัวของคิว rear ตำแหน่งปลายด้านท้ายของคิว size จำนวนสมาชิกที่มีอยู่ในคิวทั้งหมด 25 June AM Week 08 - Queue

5 การสร้าง Queue โดยใช้ Array (Array Implementation of Queue)
56 85 12 8 X rear rear front Enqueue enqueue ข้อมูล element X ลงไปในคิว 1. เพิ่มค่า size และเพิ่มค่า rear 2. set ค่า queue[rear] = X 25 June AM Week 08 - Queue

6 การสร้าง Queue โดยใช้ Array (Array Implementation of Queue)
56 85 12 8 front front rear Dequeue ในการ dequeue ข้อมูล element หนึ่งๆออกไป 1. return ค่า queue[front] 2. ลดค่า size และเพิ่มค่า front ขึ้นหนึ่งค่า 25 June AM Week 08 - Queue

7 Circular Array Implementation
เมื่อไรก็ตามที่ค่า Front และ Rear ขึ้นลงไปถึงสุดขอบเขตของอาร์เรย์ ให้รวบกลับขึ้นมาเป็นส่วนเริ่มต้นของอาร์เรย์ เรียกว่าเป็นการสร้างโดยใช้ Circular Array ถ้าไม่ว่าการเพิ่มค่า Front หรือค่า Rear ทำให้เกินขอบเขตของอาร์เรย์ ค่าตำแหน่งจะถูก reset กลับไปเป็นตำแหน่งแรกของอาร์เรย์ 25 June AM Week 08 - Queue

8 ข้อที่ควรระวังในการใช้ Circular Array
เราต้องตรวจสอบว่า Queue ดังกล่าวเป็นคิวเปล่า (Empty Queue) หรือไม่ เนื่องจากการ Dequeue ในขณะที่คิวว่างจะเป็นการ return ค่าที่ไม่ได้รับการกำหนดค่าเป็นขยะออกมา ซึ่งเราอาจไม่ได้สังเกตข้อผิดพลาดนี้ ขนาดของ Queue ในขณะที่คิวว่าง (Empty Queue) จะได้ rear = front -1 เมื่อไม่ใช้ Circular Array ขนาดของอาร์เรย์เป็น Asize คิวจะเต็มเมื่อมีสมาชิกทั้งหมด Asize ตัว 25 June AM Week 08 - Queue

9 ตัวอย่างการดำเนินการบน Queue
สถานะเริ่มต้น (Initial State) หลังจาก Enqueue(1) 25 June AM Week 08 - Queue

10 หลังจาก Dequeue ซึ่งเป็นการ Return ค่า 2 ออกมา
Enqueue(3) หลังจาก Dequeue ซึ่งเป็นการ Return ค่า 2 ออกมา 25 June AM Week 08 - Queue

11 หลังจากการ Dequeue ซึ่งเป็นการ Return ค่า 4 ออกมา
25 June AM Week 08 - Queue

12 หลังจากการ Dequeue ซึ่งเป็นการ Return ค่า 3 ออกมา
และทำให้คิวว่าง (Make Empty Queue) สังเกตว่า Rear = Front - 1 25 June AM Week 08 - Queue

13 การประกาศ Queue ADTs /*Declare Function Prototype*/
PtrToQRecord createQueue(int); void makeEmpty(PtrToQRecord); Boolean isEmpty(PtrToQRecord); Boolean isFull(PtrToQRecord); void front(PtrToQRecord); void enqueue(TypeOfElement, PtrToQRecord); void dequeue(PtrToQRecord); void deleteQueue(PtrToQRecord); const CAPACITY; Struct QueueRecord { int front; int rear; int size; TypeOfElement queuearray[CAPACITY]; }; 25 June AM Week 08 - Queue

14 โครงสร้างของ Structure สำหรับ Queue
QueueRecord Struct QueueRecord { int front; int rear; int size; int queueArray[CAPACITY]; } int front int rear int size int queueArray 25 June AM Week 08 - Queue

15 การตรวจสอบว่าอาร์เรย์ของ Queue เป็นอาร์เรย์เปล่าหรือไม่
IsEmpty การตรวจสอบว่าอาร์เรย์ของ Queue เป็นอาร์เรย์เปล่าหรือไม่ Algorithm Boolean isEmpty(pointerToQRecord) pointerToQRecord – pointer to queue record Output True – if the queue is empty False – if the queue is not empty Begin (return size of pointerToQRecord is 0) End 25 June AM Week 08 - Queue

16 MakeEmpty การทำให้คิวเป็นคิวว่าง
Algorithm makeEmpty(pointerToQRecord) pointerToQRecord – pointer to queue record Begin (Set size of pointerToQRecord to 0) (Set front of pointerToQRecord to 1) (Set rear of pointerToQRecord to 0) End 25 June AM Week 08 - Queue

17 Enqueue การ Enqueue ใส่ข้อมูลลงในคิว
Algorithm enqueue(newElement, pointerToQRecord) newElement – new element to be entered into the queue pointerToQRecord – pointer to queue record Begin If (isFull(pointerToQRecord) is True) (Show Error Full Queue) Else { (Increase size of pointerToQRecord by 1) If ((rear of pointerToQRecord + 1) = CAPACITY) (Set rear of pointerToQRecord to 0) (Increase rear of pointerToQRecord by 1) (Set queueArray of pointerToQRecord [rear of pointerToQRecord] to newElement) } End 25 June AM Week 08 - Queue


ดาวน์โหลด ppt คิว (Queue) Queue ADT Queue เป็น List ชนิดหนึ่ง แต่สำหรับ queue การแทรกข้อมูลลงบน queue (Insertion) จะทำที่ปลายใดปลายหนึ่งของ Queue ในขณะที่การลบข้อมูลออกจากคิว.

งานนำเสนอที่คล้ายกัน


Ads by Google