最小堆與最大堆的實現

2021-06-23 00:42:18 字數 844 閱讀 6185

首先介紹一下堆,它是一種經過排序的完全二叉樹,其中任一非葉子節點的大小都不大於(或不小於)其左右兒子的值。

最小堆:即任一非葉子節點的值都不大於其左右孩子的值,乙個最小堆如下圖:

首先介紹最小堆的插入操作,

void push(int e)

///最小堆元素的放入

void ****up(int s,int e)

heap[s]=heap[parent];

s=parent;

}heap[s]=e;

}///給堆中加入元素

void ****down(int s,int e

先每次在陣列的最後位置加乙個新的位置,size值加1,執行插入時,由這個新的位置往上找,找到乙個要新增的元素比該位置的父節點要大的位置,然後這個位置即是新元素的位置。在訊位置的同時不斷把不合條件的點往下移,這樣維護了最小堆的結構特點。

最小堆的元素出堆操作:

int pop()

int ret=heap[0];

int s=--size;

****down(0,heap[s]);

heap[s]=0;

return ret;

}///資料出堆

void ****down(int s,int e)

if(e

最大堆:既然知道了最小堆,那麼最大堆和最小堆都一樣,就是符號不同而已

最小堆與最大堆

wang 程式設計日記三 最小堆最小堆的實質是把樹儲存在乙個陣列,在陣列中,非葉結點的左子樹在陣列中的下標 設為x 該結點在陣列中的下標 2 1 那麼x 1就是該結點的右子樹.相反的如果某結點在陣列中的下標為x,那麼其父結點為 x 1 2。在乙個單個的結點a和其左右子樹b.c中,把其中最小的值賦給結...

最小堆與最大堆

最大堆和最小堆是二叉堆的兩種形式。最大堆 根結點的鍵值是所有堆結點鍵值中最大者,且每個結點的值都比其孩子的值大。最小堆 根結點的鍵值是所有堆結點鍵值中最小者,且每個結點的值都比其孩子的值小。上圖 通常來說,最小堆用於排序找到一堆資料裡面的最小的。因為最小值一定會上浮到根結點。通常用於優先佇列。定時器...

最大堆 最小堆

堆是一種經過排序的完全二叉樹,其中任一非終端節點的資料值均不大於 或不小於 其左孩子和右孩子節點的值。最大堆和最小堆是 二叉堆的兩種形式。最大堆 根結點的鍵值是所有堆結點鍵值中最大者。最小堆 根結點的鍵值是所有堆結點鍵值中最小者。而最大 最小堆集結了最大堆和最小堆的優點,這也是其名字的由來。最大 最...