Priority Queue เป็นคิวที่สมาชิกถูกเพิ่ม/ลบตาม priority (0-10: 0=สูงสุด 10=ต่ำสุด) กฎ 2 ข้อ:
- ข้อมูล priority สูงสุด ทำงานก่อน priority ต่ำกว่า
- priority เท่ากัน ทำงานตามลำดับที่เพิ่ม (FIFO)
โครงสร้างข้อมูลที่ใช้ได้: Stack, Queue, Linked List บทความนี้ใช้ Queue
วิธีที่ 1: หลายคิวในอาร์เรย์เดียว - แต่ละ priority มีคิวตัวเอง Front/Rear ต้องย้าย pointer เวลาเพิ่มซับซ้อน
วิธีที่ 2: คิวแยกสำหรับแต่ละ priority - แต่ละคิวเป็น circular array มี Front/Relay ตัวเอง ลบจาก priority สูงสุด (เลขน้อย)
หมายเหตุ: ถ้าขนาดคิวเท่ากัน สร้าง 2D array แทนหลาย 1D array
อัลกอริทึม Insert
insert(queue, data, priority):
ถ้า queue เต็ม: print Overflow
ปรับ Rear ตาม circular
queue.CQueue[priority][Rear] = data
ถ้า Front = -1: Front = 0
อัลกอริทึม Delete
delete(queue):
flag = 0, priority = 0
while priority <= MAX-1:
ถ้า Front[priority] != -1:
flag = 1, value = queue.CQueue[priority][Front]
ถ้า Front == Rear: Front = Rear = -1
ไม่งั้น: เพิ่ม Front แบบ circular
break
priority++
ถ้า flag = 0: print Underflow
ไม่งั้น: return value