Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

Priority Queue เบื้องต้นใน C/C++

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