完全二叉樹之所以用陣列的方式存在,在於他的乙個特性 若子節點為i,則父節點為(i-1)/2,注意c++特性,該結果肯定是個整數。
若父節點為j,則子節點必為2*j+1;則在陣列裡面可以非常方便的通過下標去獲取。
建堆的核心思想:
堆在index的值為heap[index],然後其兩個孩子的值邊可求得,左孩子為heap[index*2+1],右孩子為heap[index*2+2]。
首先比較左邊孩子與右邊孩子,獲取較小值的孩子,然後讓heap[index]與值較小的孩子進行比較。若值小則交換值,並且移動index到值較小孩子的位置,否則退出調整。
下面看**,有注釋:
#pragma oncetemplate主程式:class
jbminheap
jbminheap(jbminheap &h)
}~jbminheap()
//獲取整個最小堆的頭部指標
t *getminheap()
//判斷堆是不是空的
bool
isempty()
bool
add(t x)
_index++;
_minheap[_index] =x;
return
true
; }
bool
isfull()
//堆進行向下調整
void adjustdown(int
index);
//隊進行向上調整
void adjustup(int
index);
//建堆運算
void
createminheap()
for (int i = (_index-1)/2;i >-1;i--)
}};template
void jbminheap::adjustdown(int
index)
while (index<_index>
if (twoc >_index)
if (_minheap[onec] <= _minheap[twoc])
else
}else
else}}
}template
void jbminheap::adjustup(int
index)
while (index>-1
)
else
}else
//出界就結束迴圈}}
C 資料結構之最小堆的實現方法
最小堆 基本思想 堆對應一棵完全二叉樹,且所有非葉結點的值均不大於 或不小於 其子女的值,根結點 堆頂元素 的值是最小 或最大 的,每次都取堆頂的元素,將其放在序列最後面,然後將剩餘的元素重新調整為最小 大 堆,依次類推,最終得到排序的序列。堆排序分為大頂堆和小頂堆排序。大頂堆 堆對應一棵完全二叉樹...
C 資料結構之最小堆的實現方法
基本思想 堆對應一棵完全二叉樹,且所有非葉結點的值均不大於 或不小於 其子女的值,根結點 堆頂元素 的值是最小 或最大 的,每次都取堆頂的元素,將其放在序列最後面,然後將剩餘的元素重新調整為最小 大 堆,依次類推,最終得到排序的序列。堆排序分為大頂堆和小頂堆排序。大頂堆 堆對應一棵完全二叉樹,且所有...
6 資料結構 最小堆
開發過程,經常需要對資料集合進行維護。維護資料結合的資料結構可統稱為容器。最小堆是維護資料集合的容器的一種,最小堆具備如下性質 設v i 為位置i的元素值 1.對維護的n個元素,順序儲存於索引為1 n的陣列位置 2.對索引i,若索引2 i n,有v i v 2 i 若索引2 i 1 n,有v i v...