Circular Queue

วันนี้ผมนำเสนอแปลกๆ นะ บทความวันนี้เสนอเรื่อง Circular Queue โดยนำเสนอในรูปแบบ Q&A นะครับ ลองติดดามได้นะครับ ^__^ Q: ทำไมถึงต้องมี Circular QueueA: เพราะ ว่างการใช้ queue แบบเดิม จะทำให้เสียเนื้อที่ใส่ส่วนด้านหน้าไป โดยเปล่าประโยชน์ หลังจากที่ enqueue ออกแล้ว ถึงแล้วว่าจะมีการสร้าง queue ใหม่ชึ้นมา ระบบก็จะจองเนื้อที่ในหน่วงความจำใหม่แทน ลองดูแผนภาพประกอบ Q: แล้วใช้ Circular Queue จะแก้ปัญหาในข้อที่แล้วได้อย่างไรA: ลองเปลี่ยนวิธีการเขียนจากการเขียนที่เรามองว่าคิว คือ แถวยาวๆ มามองให้เป็นวงกลม โดยมีการปรับเปลี่ยนในส่วนของโปรแกรม เพื่อสามารถที่จะทำ Circular Queue ลองดูแผนภาพประกอบ Q: แล้วเราจะรู้ได้อย่างไร ว่า Queue มันเต็ม หรือยัง หรือตอนนี้ยังใส่ได้อีกเท่าไหร่A: ขอตอบแยกเป็นข้อๆ ดังนี้ครับ ถ้าเป็น array ลองใช้ค่า index ให้เป็นประโยชน์ หรือจะสร้างตัวแปรอีกอันนึงขึ้นมานับก็ได้ ถ้าเป็น linked list ก็ต้องสร้างตัวแปรขึ้นมานับ ถึงแม้ว่าlinked list จะมีโอกาสที่จะเต็มยาก แต่ถ้าเป็นงานใหญ่ๆ ก็มีโอกาสเต็มได้เหมือนกัน ลอง Implement Code ผมมีการใช้ interface queueADT เพื่อกำหนดกรอบการทำงานว่า Circular Queue มีการทำงานอะไรบ้าง โดยตัว Interface queueADT สามารถนำไปใช้ต่อได้ ถ้านำไป implement queue แบบอื่นๆครับ ต่อมาเป็นการ Implement ArrayCirQueue โดยมีการอธิบายรายละเอียดใน Session ถัดไปครับ อธิบาย Code ทีละส่วน Data Member เพิ่มเติม: ใช้ head, tail และ qsize เป็นมือที่คอยจัดการภายใน…