資料結構之最小堆的實現C 版

2022-01-19 08:00:06 字數 1718 閱讀 2693

完全二叉樹之所以用陣列的方式存在,在於他的乙個特性 若子節點為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...