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

การแนะนำคิวลำดับความสำคัญใน C/C++


คิวลำดับความสำคัญเป็นประเภทของคิวที่องค์ประกอบจะถูกแทรกหรือลบตามลำดับความสำคัญที่กำหนดให้กับองค์ประกอบเหล่านั้น โดยที่ระดับความสำคัญเป็นค่าจำนวนเต็มที่อยู่ในช่วง 0-10 โดยที่ 0 แสดงองค์ประกอบที่มีลำดับความสำคัญสูงสุด และ 10 แสดงองค์ประกอบด้วย ลำดับความสำคัญต่ำสุด มีกฎสองข้อที่ปฏิบัติตามสำหรับการนำคิวลำดับความสำคัญไปใช้ -

  • ข้อมูลหรือองค์ประกอบที่มีลำดับความสำคัญสูงสุดจะถูกดำเนินการก่อนข้อมูลหรือองค์ประกอบที่มีลำดับความสำคัญต่ำสุด
  • หากองค์ประกอบสองรายการมีลำดับความสำคัญเท่ากันกว่าองค์ประกอบนั้นจะถูกดำเนินการตามลำดับ องค์ประกอบนั้นจะถูกเพิ่มในรายการ

มีโครงสร้างข้อมูลหลายแบบที่สามารถใช้เพื่อนำลำดับความสำคัญไปใช้ เช่น กอง คิว และรายการที่เชื่อมโยง ในบทความนี้ เราจะอธิบายโครงสร้างข้อมูลคิว มีสองวิธีที่สามารถใช้เพื่อนำลำดับความสำคัญไปใช้เช่น −

  • รักษาคิวสำหรับหลายลำดับความสำคัญในอาร์เรย์เดียว

    วิธีหนึ่งในการใช้คิวลำดับความสำคัญคือการรักษาคิวสำหรับลำดับความสำคัญแต่ละรายการ เราสามารถเก็บหลายคิวเหล่านี้ไว้ในอาร์เรย์เดียว โดยที่แต่ละคิวจะมีพอยน์เตอร์สองตัวคือด้านหน้าและด้านหลัง ในคิว ตัวชี้ด้านหน้าใช้เพื่อแทรกองค์ประกอบในคิวและจะเพิ่มขึ้น 1 เมื่อใดก็ตามที่องค์ประกอบถูกแทรกและตัวชี้อีกตัวอยู่ด้านหลังซึ่งใช้เพื่อลบหรือลบองค์ประกอบออกจากคิวซึ่งจะลดลง 1 เมื่อใดก็ตามที่องค์ประกอบ จะถูกลบออกจากคิว ในท้ายที่สุด เราสามารถกำหนดจำนวนขององค์ประกอบในคิวผ่านตำแหน่งของพอยน์เตอร์สองตัวได้

การแนะนำคิวลำดับความสำคัญใน C/C++

  • ในการนำเสนอประเภทนี้ เราจำเป็นต้องเลื่อนพอยน์เตอร์เพื่อให้มีที่ว่างสำหรับการแทรกองค์ประกอบใหม่ ซึ่งจะทำให้ซับซ้อนทั้งในแง่ของเวลาและพื้นที่
  • รักษาคิวสำหรับลำดับความสำคัญแต่ละรายการในอาร์เรย์เดียว

    ในวิธีการประเภทนี้ เราสร้างลูกศรแยกสำหรับแต่ละองค์ประกอบ ทุกคิวจะถูกนำไปใช้เป็นอาร์เรย์แบบวงกลมและมีตัวแปรพอยน์เตอร์สองตัว นั่นคือ ด้านหน้าและด้านหลัง. องค์ประกอบที่มีหมายเลขลำดับความสำคัญจะถูกแทรกในคิวที่เกี่ยวข้องเช่นเดียวกัน หากเราต้องการลบองค์ประกอบออกจากคิว องค์ประกอบนั้นจะต้องเป็นองค์ประกอบจากคิวที่มีลำดับความสำคัญสูงสุด จำนวนเต็มที่มีลำดับความสำคัญต่ำสุดระบุลำดับความสำคัญสูงสุด (0)

การแนะนำคิวลำดับความสำคัญใน C/C++

หมายเหตุ - หากแต่ละคิวมีขนาดเท่ากัน เราก็สามารถสร้างอาร์เรย์สองมิติเดียวแทนที่จะสร้างอาร์เรย์หนึ่งมิติหลายรายการ

อัลกอริธึมสำหรับการดำเนินการแทรกในคิวลำดับความสำคัญ

insert(queue, data, priority)
   If(queue->Rear[priority] = MAX-1 AND queue->Front[priority] = 0) OR (queue->Rear[priority] +1 =queue->Front[priority])
      Print Overflow
   End
   IF queue->Rear[priority - 1] = MAX-1
      Set queue->Rear[priority - 1] = 0
   Else
      Set queue->Rear[priority] = queue->Rear[priority - 1] +1
   End
      Set queue->CQueue[priority - 1] [queue->Rear[priority - 1] = data
   IF queue->Front[priority - 1] = -1
      Set queue->Front[priority - 1] = 0
End

อัลกอริธึมสำหรับการดำเนินการแทรกในคิวลำดับความสำคัญ

delete(queue)
   Set flag = 0, priority = 0
      While priority <= MAX-1
         IF NOT queue->Front[priority] = -1
            Set flag = 1
            Set value = queue->CQueue[priority][queue->Front[priority]]
            IF queue->Front[priority] = queue->Rear[priority]
               Set queue->Front[priority] = queue->Rear[priority] = -1
            Else
            IF queue->Front[priority] = MAX-1
               Set queue->Front[priority] = 0
            Else
               Set queue->Front[priority] = queue->Front[priority] + 1
            End
         End
      Break
   End
   Set priority = priority +
End
If flag = 0
   Print underflow
Else
   Return value
End