基於二叉堆的優先佇列java實現

2021-08-19 15:22:42 字數 834 閱讀 9433

堆有序的·二叉樹,就是每個節點值都是大於等於它的子節點值。

這裡用大小為n+1的陣列pq來表示乙個大小為n的堆,不使用pq[0]。

關於二叉樹,有乙個特點很重要,就是位置k的父節點是k/2,子節點是2*k和2*k+1。

堆的有序化,包括兩種情況:

1.當某個節點的值增大時,採用的是由下至上的堆有序化,比較該節點與它的父節點的值,並根據比較結果交換位置。定義方法swim(上浮)。

2.當某個節點的值減小時,採用的是由上至下的堆有序化,比較該節點與它的較大的那個子節點的值,並根據比較結果交換位置。定義方法sink(下沉)。

實現如下:

package maxpq;

public class maxpq>

public boolean isempty()

public int size()

public void insert(key key)

public key delmax()

private void sink(int k)

if (!less(k,j))

else

} }private void swim(int k)

} private void exch(int i, int j)

private boolean less(int i, int j)

}

測試如下:

package maxpq;

public class test

}

結果如下:

true88

76false

優先佇列 二叉堆

優先佇列 二叉堆 二叉堆是一棵完全二叉樹,最大堆 最小堆 中,所有根節點的鍵值都要比對應的子樹要大 小 由於是完全二叉樹,所以儲存結構可以採用陣列。最大堆的建立 include include include include include include define inf 0x3f3f3f3f...

二叉堆 優先佇列

堆 堆常見的二叉堆,這種資料結構有大根堆和小根堆。對於大根堆來說,每個父節點是大於他的兩個孩子節點的。也就是最大值在根節點。小根堆與之相反。如果堆用陣列實現的話,如果從1開始計數 因為0的位置可以在上慮或者下慮的時候做個暫存的位置 那麼乙個孩子的父節點是i 2 如果知道了父節點,而左孩子的節點位置為...

二叉堆(優先佇列)

0.1 本文總結於 資料結構與演算法分析,但源 均為原創 旨在理清二叉堆 優先佇列 堆的其他操作及其應用,以便讓朋友些知道為什麼要學習優先佇列 二叉堆 1.0 優先佇列定義 優先佇列是允許至少下列兩種操作的資料結構,insert 插入 它的工作時顯而易見的,以及 deletemin 刪除最小者 它的...