實現自定義小根堆前我們首先要了解兩個公式
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個結點左右子結點下標分別為...