更新時間:2021-11-01 11:26:41 來源:動力節點 瀏覽1599次
優先級隊列是一種特殊類型的隊列,其中每個元素都與一個優先級值相關聯。并且,元素根據其優先級提供服務。即,首先服務更高優先級的元素。
但是,如果出現具有相同優先級的元素,則按照它們在隊列中的順序提供服務。
通常,在分配優先級時考慮元素本身的值。例如,
具有最高值的元素被認為是最高優先級的元素。但是,在其他情況下,我們可以假設具有最低值的元素作為最高優先級元素。
我們還可以根據需要設置優先級。
在隊列中,執行先進先出規則,而在優先級隊列中,根據優先級刪除值。首先刪除具有最高優先級的元素。
優先隊列可以使用數組、鏈表、堆數據結構或二叉搜索樹來實現。在這些數據結構中,堆數據結構提供了優先隊列的有效實現。
因此,我們將在本教程中使用堆數據結構來實現優先級隊列。在以下操作中實現了最大堆。
優先級隊列的基本操作是插入、移除和查看元素。
在研究優先隊列之前,請參考堆數據結構以更好地理解二叉堆,因為它用于實現本文中的優先隊列。
1. 將元素插入優先隊列
通過以下步驟將元素插入優先級隊列(最大堆)。
在樹的末尾插入新元素。
堆肥樹。
將元素插入優先級隊列的算法(最大堆)
如果沒有節點,則創建一個新節點。否則(一個節點已經存在)在末尾插入新節點(從左到右的最后一個節點。)
堆化數組對于最小堆,上述算法被修改parentNode為始終小于newNode。
2. 從優先隊列中刪除一個元素
從優先級隊列(最大堆)中刪除元素的操作如下:
選擇要刪除的元素。
與最后一個元素交換它。
刪除最后一個元素。
堆肥樹。
刪除優先隊列中元素的算法(最大堆)
如果nodeToBeDeleted是leafNode,則移除節點,否則交換nodeToBeDeleted與lastLeafNode,移除noteToBeDeleted
堆化數組對于最小堆,修改了上述算法,使兩者childNodes都小于currentNode。
3.從優先隊列偷看(查找最大值/最小值)
Peek 操作返回最大堆的最大元素或最小堆的最小元素,而不刪除節點。
對于最大堆和最小堆
返回根節點
4.從優先隊列中提取Max/Min
Extract-Max 返回從最大堆中刪除后具有最大值的節點,而 Extract-Min 返回從最小堆中刪除后具有最小值的節點。
如果大家想了解更相關知識,可以關注一下動力節點的Java在線學習,里面的內容從入門到精通,對于初學者來說會有很大幫助。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習