คิว ลักษณะการทำงานของ Queue การดำเนินการของ Queue การตรวจสอบ Queue Circle Queue ความแตกต่างระหว่าง Stack กับ Queue
มีการจัดเก็บโดยอาศัยพื้นฐานของแถวลำดับและแบบ List Queue Structure มีการจัดเก็บโดยอาศัยพื้นฐานของแถวลำดับและแบบ List ลักษณะการทำงานของ Queue การนำสมาชิกใหม่ใส่ไปใน Queue จะใส่ที่ปลายด้านหนึ่ง เรียกว่าส่วนท้าย หรือ Rear การนำสมาชิกออกจาก Queue จะทำที่ปลายอีกด้านหนึ่ง เรียกว่าส่วนหน้า หรือ Front
ตัวอย่างลักษณะการทำงานของ Queue 4 5 7 2 1 F R เป็นโครงสร้างแบบเข้าก่อน-ออกก่อน FIFO First In – First Out
การดำเนินการของ Queue (Operation on Queue) การนำสมาชิกใหม่เข้าไปใน Queue (Add หรือ Insert) ใช้คำสั่ง Enq หมายถึงให้นำ Item ซึ่งเป็นสมาชิก ใหม่เข้าไปต่อท้ายสมาชิกทุกตัวที่อยู่ในโครงสร้าง Queue การนำสมาชิกออกจาก Queue (Remove หรือ Delete) ใช้คำสั่ง Deq หมายถึงเอาสมาชิกตัวแรกหรือตัวหน้า สุดใน Queue ออกมา แล้วส่งสามารถผ่าน Item
การตรวจสอบ Queue Queue ว่าง ใช้ฟังก์ชัน Empty Q Queue ว่างค่าเป็น True Queue ไม่ว่างค่าเป็น False Queue ว่างและพยายามที่จะนำข้อมูลออกจะเกิด Underflow Queue เต็ม ใช้ฟังก์ชัน Full Q Queue เต็มค่าเป็น True Queue ไม่เต็มค่าเป็น False Queue เต็มและพยายามจะนำข้อมูลเข้าจะเกิด Overflow
การตรวจสอบ Queue การเคลียร์ Queue Queue ก่อนโดยใช้ Clear Q ตัวอย่าง F = 0 , R=0 Clear Q (Que) Enq (Que,4) 4 F = 1 , R = 1 F R
ตัวอย่าง (ต่อ) F = 1 , R = 2 F = 1 , R = 3 Overflow F = 2 , R = 3 Enq (Que,5) F = 1 , R = 2 4 5 F R 4 5 7 Enq (Que,7) F = 1 , R = 3 F R Enq (Que,8) 4 5 7 Overflow F = 2 , R = 3 Item = 4 Deq (Que,Item) 5 7 F R
ตัวอย่าง (ต่อ) การเพิ่มข้อมูลเข้าต้องเข้าที่ Rear ของ Queue F = 3 , R = 3 Item = 5 7 Deq (Que,Item) F R Deq (Que,Item) F = 0 , R = 0 Item = 7 Deq (Que,Item) Underflow การเพิ่มข้อมูลเข้าต้องเข้าที่ Rear ของ Queue Rear = Rear + 1 การนำข้อมูลออกต้องทำที่ Front ตัวแรกออกไป Front = Front - 1
โปรแกรมการเพิ่ม-ลดข้อมูลใน Queue Const n=20; Type itemtype = char; Queue = Array[1..N] of itemtype; Var Q : Queue; Front, Rear :0..N;
โปรแกรมการเพิ่ม-ลดข้อมูลใน Queue (ต่อ) Procedure Enq (Var Q:Queue;X:itemtype); Begin If Rear = n then writeln (‘Full Queue’) Else Begin Rear := Rear + 1 ; Q[Rear] :=X;
โปรแกรมการเพิ่ม-ลดข้อมูลใน Queue (ต่อ) If Front = 0 then Front := 1; End; Procedure Deq (Var Q :Queue): itemtype; Begin If Front = 0 then writeln (‘Empty Queue’) Else
โปรแกรมการเพิ่ม-ลดข้อมูลใน Queue (ต่อ) Begin Y := Q[Front]; If Front = Rear then Begin Front := 0, Rear :=0 Else Front := Front + 1; End;
Circle Queue เป็นการนำข้อมูลเข้าสู่ Queue โดยนำไปวางไว้ใน ส่วนหน้า (นำส่วนหน้ามาใช้อีกกรณีที่ส่วนหน้าว่าง) เช่น นำข้อมูลส่วนท้ายของ Queue (n) ไปต่อกับส่วนหน้าที่ตำแหน่ง Q(1) ตัวอย่าง 5 Enq (Que,5) F=1 , R = 1 F R
ตัวอย่าง(ต่อ) F=1 , R = 2 F=1 , R = 3 F=2 , R = 3 Item = 5 F=2 , R = 1 Enq (Que,3) F=1 , R = 2 5 3 F R 5 3 2 Enq (Que,2) F=1 , R = 3 F R Deq (Que,Item) F=2 , R = 3 Item = 5 3 2 F R 4 3 2 F=2 , R = 1 Enq (Que,4) R F
ความแตกต่างระหว่าง Stack กับ Queue เข้าก่อนออกก่อน ทำด้านใดด้านหนึ่งทั้งด้านหน้าด้านหลัง F , R การนำสมาชิกเข้า เรียกว่า Enq การนำสมาชิกออก เรียกว่า Deq Stack เข้าหลังออกก่อน ทำที่ส่วนปลาย การนำสมาชิกเข้า เรียกว่า Push การนำสมาชิกออก เรียกว่า Pop