乙個合適的資料結構應該支援兩種操作:刪除最大元素和插入元素。這種資料型別叫做優先佇列。
實現棧或是佇列與實現優先佇列的最大不同在於對效能的要求。對於棧和佇列,我們的實現能夠在常數時間內完成所有操作;
而對於優先佇列,我們剛剛討論過的所有初級實現中,插入元素和刪除最大元素這兩個操作之一在最壞情況下需要線性時間來完成。
乙個優先佇列的用例
問題:輸入n個字串,每個字串都對映著乙個整數,從中找出最大的m個整數。
分析:
public
class topm
//最大的m個元素都在優先佇列中
stackstack = new stack();
while(qpq.isempty()) stack.push(pq.delmin());
for(transaction t : stack) system.out.println(t);
//降序列印}}
陣列實現(無序)基於陣列的下壓棧。
陣列實現(有序)
鍊錶表示法
基於鍊錶的下壓棧,其他修改同陣列實現。
二叉堆實現
堆的定義
當一顆二叉樹的每個節點都大於等於它的兩個子節點時,它被稱為堆有序。
二叉堆表示法
完全二叉樹只用陣列而不需要指標就可以表示。將二叉樹的節點按照層級順序放入陣列中。
二叉堆是一組能夠用堆有序的完全二叉樹排序的元素,並在陣列中按照層級儲存(不使用陣列的第乙個位置)。
——在乙個堆中,位置k的節點的父節點的位置為【k/2】,而它的兩個子節點的位置分別為2k和2k+1。
堆實現的比較和交換方法
堆有序化(上浮)
堆有序化(下沉)
基於堆的優先佇列
參考《algorithm》
模板 二叉堆 優先佇列的二叉堆陣列實現
最近開始學資料結構,一直無心更新部落格,今天結束集訓,晚上打算碼一下最近的進度。建立乙個最大容量為maxsize的int型堆 maxheapque maxsize 預設最大容量為1007 maxheapque 作為優先佇列 pop 同優先佇列pop 如果佇列已為空還要執行pop,就會執行死迴圈以報錯...
二叉堆實現優先佇列
最大堆 每個節點都大於等於它的兩個子節點 堆的操作 優先佇列 框架public class maxpq comparable 返回當前佇列中最大元素 public key max 插入元素 e public void insert key e 刪除並返回當前佇列中最大元素 public key de...
優先佇列 二叉堆
優先佇列 二叉堆 二叉堆是一棵完全二叉樹,最大堆 最小堆 中,所有根節點的鍵值都要比對應的子樹要大 小 由於是完全二叉樹,所以儲存結構可以採用陣列。最大堆的建立 include include include include include include define inf 0x3f3f3f3f...