堆的資料結構是一種陣列,也可以說堆是一種有個性的陣列,他可以被視為一顆完全二叉樹(也有可能是滿二叉樹)
任一節點的值均大於等於他左右孩子節點的值,其中堆頂的值最大(根節點) 左孩子節點=2*父節點+1 右孩子節點=2*父節點+2 父節點=(孩子節點-1)/2
堆的應用場景:
從很多個數中找出最大的前k個數
最大堆的演算法實現:
#include
#include
#include
#define default_capcity 128
typedef
struct _heap heap;
//初始堆
bool
initheap
(heap &heap,
int*orginal,
int size)
;//建堆
static
void
buildheap
(heap &heap)
;//調整堆
static
void
adjustdown
(heap &heap,
int index)
;int
main
(void);
int size =
sizeof
(ori**als)
/sizeof
(int);
if(!initheap
(hp, ori**als, size)
)int i =0;
for(i =
0; i < hp.size; i++
)system
("pause");
return0;
}bool
initheap
(heap & heap,
int* orginal,
int size)
return
true;}
void
buildheap
(heap & heap)
}//將當前葉子節點調整為最大堆
void
adjustdown
(heap & heap,
int index)
//判斷最大的節點是否大於當前節點,若大於則交換他們
if(cur > heap.arr[child]
)else
}}
執行結果:
將以上得出的資料按照二叉樹方式排好得到的完全二叉樹即滿足最大堆的所有性質
C 最大堆實現
max heap.h pragma once include template class max heap node heap 最大堆 uint32 t max size 最大儲存數 uint32 t size 儲存數 擴容 void expansion 刪除指定下標節點 void del nod...
c 最大堆的實現
在看一些開源元件的原始碼時,會發現很多的底層地方都會使用到最大堆 最小堆 的資料結構,如 在libevent中維護超時事件就用到了最小堆的結構,可見,這種資料結構的重要性。最大堆 根結點的鍵值是所有堆結點鍵值中最大者。最小堆 根結點的鍵值是所有堆結點鍵值中最小者。堆,最重要的乙個過程就是重建的過程,...
演算法之堆排序(最大堆c 實現)
堆是完全二叉樹的結構,因此對於乙個有n個節點的堆,高度為o logn 最大堆 堆中的最大元素存放在根節點的位置。除了根節點,其他每個節點的值最多與其父節點的值一樣大。也就是任意乙個子樹中包含的所有節點的值都不大於樹根節點的值。堆中節點的位置編號都是確定的,根節點編號為1,每一層從左到右依次編號。由堆...