C/C++ 中優先佇列簡介


優先佇列是一種佇列,其中元素根據分配給它們的優先順序插入或刪除,其中優先順序是一個整數值,範圍在 0-10 之間,0 表示具有最高優先順序的元素,10 表示具有最低優先順序的元素。實現優先佇列遵循兩條規則:

  • 具有最高優先順序的的資料或元素將在具有最低優先順序的的資料或元素之前執行。
  • 如果兩個元素具有相同的優先順序,則它們將按照新增到列表中的順序執行。

有多種可用於實現優先佇列的資料結構,例如堆疊、佇列和連結串列。在本文中,我們將解釋佇列資料結構。有兩種方法可用於實現優先佇列:

  • 在一個數組中維護多個優先順序的佇列

    實現優先佇列的一種方法是為每個優先順序維護一個佇列。我們可以將這些多個佇列儲存在一個數組中,每個佇列將有兩個指標,即前端和後端。在佇列中,前端指標用於將元素插入佇列,並在插入元素時遞增 1;另一個指標是後端,用於從佇列中刪除或移除元素,並在從佇列中移除元素時遞減 1。最後,透過這兩個指標的位置,我們還可以確定佇列中的元素數量。

  • 在這種表示形式中,我們需要移動指標以騰出空間來插入新元素,這在時間和空間方面都會使其變得複雜。
  • 在一個數組中維護每個優先順序的佇列

    在這種方法中,我們為每個元素建立單獨的箭頭。每個佇列都實現為一個迴圈陣列,並有兩個指標變數,即前端和後端。具有給定優先順序編號的元素將插入到相應的佇列中,同樣,如果我們想要從佇列中刪除一個元素,它必須是來自最高優先順序佇列的元素。最低優先順序整數表示最高優先順序(0)。

注意 - 如果每個佇列的大小相同,那麼我們可以建立一個二維陣列,而不是建立多個一維陣列。

優先佇列中插入操作的演算法

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

更新於:2019-12-23

409 次檢視

啟動你的 職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.