自定義實現小根堆

2021-08-31 18:29:47 字數 750 閱讀 4820

實現自定義小根堆前我們首先要了解兩個公式

1.父節點到子節點:2n+1

2.子節點到父節點:(n-1)/2

新增元素時,只需通過新增的元素與其父節點元素的大小進行比較,若子節點元素大於父節點則位置調換,這裡便需要用到公式2

刪除原始時,直接將最後一位元素賦值給第一位,這樣做的好處便是可以盡可能少的破壞原來已經形成的小根堆,這裡需要用到公式1,要注意的時在父節點與子節點比較時,首先要將兩個字節點的值進行比較,取小的與父節點進行比較,這樣才能保證交換後是乙個小根堆

public class heapnumber 

private int data;

private int size;

public heapnumber()

public heapnumber(int size)

public void add(int value)

if (size == 0) else

}public void up() }}

public boolean isfull()

public int remove()

public boolean down()

if(data[i] < tmp) else

data[i] = tmp;

}return true;

}public void show()

}public int gettop()

小根堆 陣列實現

特點 父節點永遠比孩子節點小,不強制要求左孩子比右孩子小,但是為了實現方便,我令其左孩子比右孩子小。反之為大根堆。push 插入元素 陣列長度增加 注意 增加的不是本次插入所需要的位置,而是下次元素的位置,這句話能解釋為什麼pop的時候需要 se才能拿到當前堆中的最後乙個元素 從下往上判斷是否滿足小...

堆(大根堆 小根堆)

堆又可稱之為完全二叉堆。這是乙個邏輯上基於完全二叉樹 物理上一般基於線性資料結構 如陣列 向量 鍊錶等 的一種資料結構。學習過完全二叉樹的同學們都應該了解,完全二叉樹在物理上可以用線性資料結構進行表示 或者儲存 例如陣列int a 5 就可以用來描述乙個擁有5個結點的完全二叉樹。那麼基於完全二叉樹的...

堆(Heap)大根堆 小根堆

具有以下的特點 1 完全二叉樹 2 heap中儲存的值是偏序 min heap 父節點的值小於或等於子節點的值 max heap 父節點的值大於或等於子節點的值 一般都用陣列來表示堆,i結點的父結點下標就為 i 1 2。它的左右子結點下標分別為2 i 1和2 i 2。如第0個結點左右子結點下標分別為...