ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
ได้พิมพ์โดยThurdchai Suksabaijai ได้เปลี่ยน 10 ปีที่แล้ว
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
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.