最大堆和最小堆都是一棵完全二叉樹。
最大堆:是指根節點的關鍵字值是堆中的最大關鍵字值,且每個節點若有兒子節點,其關鍵字值都不小於其兒子節點的關鍵字值。
最小堆:是指根節點的關鍵字值是堆中的最小關鍵字值,且每個節點若有兒子節點,其關鍵字值都不大於其兒子節點的關鍵字值。
步驟:
把當前節點數i設定為已知堆的節點數加1即i=++(*n),即新增的元素放在最下一層作為新的葉子節點。求出節點i的父節點parent=i/2;判斷是否為空堆,並比較所插入元素與父節點關鍵字值的大小;
若所插入節點關鍵字值大於父節點關鍵字值即item>heap[parent],則把父節點向下移,並把父節點作為當前節點,依次求父節點,即依次沿著樹枝向上延伸;
把元素item插入到正確位置;
最大堆的刪除,即刪除最大的元素。我們先取最後的元素提到根結點,然後刪除最大值,然後再把新的根節點放到合適的位置。
#include #include #define max_size 10
int heap[max_size];
/*最大堆的插入操作*/
/*注:堆的下標是從1開始,而不是0*/
void max_heap_insert(int *heap,int *n,int item)
i=++(*n);
parent=i/2;
while((i!=1) && (item>heap[parent]))//若堆為非空,且所插入資料item大於父節點的關鍵字值
heap[i]=item;//插入到正確的位置
} /*最大堆的刪除操作*/
int max_heap_delete(int *heap,int *n)
item=heap[1];//把最大堆的最大元素賦給item
temp=heap[(*n)--];//堆的最後節點關鍵字值
parent=1;
child=2*parent;
while(child<=(*n)) //《迴圈次數的限制
} heap[parent]=temp;//插入到正確位置
return item;//返回刪除的關鍵字值
} int main()
{ int item,i;
int n=0;
for(i=1;i1 2 32 12 55 334 7 23 7 67
334 32 55 23 12 2 7 1 7
the deleted data is:334
55 32 7 23 12 2 7 1
STL原始碼解析之heap
include include include heap algorithms using namespace std heap的所有元素都必須遵循特別的完全二叉樹排列規則,所有heap不提供遍歷功能,也不提供迭代器 int main vectorivec ia,ia 9 for int i 0 i...
最小最大堆
include include include include define max size 100 define swap x,y,t t x x y y t typedef struct element element heap max size void min max insert ele...
最大堆 最小堆
堆是一種經過排序的完全二叉樹,其中任一非終端節點的資料值均不大於 或不小於 其左孩子和右孩子節點的值。最大堆和最小堆是 二叉堆的兩種形式。最大堆 根結點的鍵值是所有堆結點鍵值中最大者。最小堆 根結點的鍵值是所有堆結點鍵值中最小者。而最大 最小堆集結了最大堆和最小堆的優點,這也是其名字的由來。最大 最...