最小堆的大建立及其一些基本操作

2021-08-20 11:08:26 字數 2290 閱讀 3041

最小堆,能夠維護最的的元素的最上面。同樣還有最大堆等

#include

#include

typedef int elementtype;

elementtype mindate = -10000 ;

struct heapstruct;

typedef struct heapstruct *priorityqueue;

priorityqueue initialize(int maxelement);       //建立並初始化

void destory(priorityqueue h);                      //銷毀最小堆

void makeempty(priorityqueue h);                //清空堆

void insert(elementtype x,priorityqueue h);    //插入x

elementtype deletemin(priorityqueue h);        //刪除堆中最小值

elementtype findmin(priorityqueue h);            //查詢最小值,返回最小值

int isempty(priorityqueue h);                            //判空

int isfull(priorityqueue h);                                //判滿

int main(void)        //主函式,最小堆,利用順序儲存結構

struct heapstruct

;priorityqueue initialize(int maxelement)                    //建立並初始化乙個最小堆

//為結構體中陣列發配空間,其中儲存每個元素

h->elements =  (elementtype*)malloc((maxelement + 1) * sizeof(elementtype));

if(null == h->elements )

h->capacity = maxelement;                       //儲存陣列最大值

h->size = 0;                                    //初始化size

h->elements[0] = mindate;                       //初始化最小值

return h;

}void insert(elementtype x, priorityqueue h)

//每次插入一次,size++一次。建立乙個空穴

for(i = ++h->size; h->elements[i / 2] > x;i /= 2)   //如果x小於父親的值,空穴上移一層

h->elements[i] = x;                                 //將x填入空穴

}void destory(priorityqueue h)

void makeempty(priorityqueue h)

/*刪除最小元比較容易,因為堆中第乙個元素就是最小元。難的是刪除最小元後,怎麼維護這個最小堆。

一種思路是,將兒子節點中較小的那個提為父親,一直這樣下去,直到最後一層。也就是將空穴一直

沿著最小元傳遞下去

*/elementtype deletemin(priorityqueue h)          //刪除堆中最小值

minelement = h->elements[1];                //堆中最小的元素

lastelement = h->elements[h->size--];       //堆中最後乙個元素,因為從陣列從1開始,所以要size--

//並且size--,也標誌著陣列中元素減一

for(i = 1; i * 2 <= h->size; i = child )

h->elements[i] = lastelement;

return minelement;

}elementtype findmin(priorityqueue h)                //堆中最小元為陣列下標為1的元素

return h->elements[1];

}int isempty(priorityqueue h)                    //如果陣列大小為0的話,陣列為空

int isfull(priorityqueue h)                     //如果陣列的大小為最大值的話,陣列滿了

Git 的使用及其一些基本用法

git config global user.name your name git config global user.email your email 為github 賬戶設定ssh key 最後新增乙個檔案測試 初始化git git init 將 新增到本地倉庫中 git add commit...

swift之建立陣列,字典及其一些用法

對於swift而言,建立陣列和oc大致是一樣的,我們可以直接用方括號來告訴系統,我要建立陣列了啊,你得識別我啊,而字典就有所不同了,在oc中是大括號,但是在swift中也是中括號,看下邊的例子 var firstarr 1 2 3 var firstdic 1 i 2 love 3 you 上邊就是...

環形佇列的建立以及一些基本的操作

我們的環形佇列長什麼樣子的尼,那幾句話也描述不出來概括不了他的樣子,還是拿一張圖看一下吧 原始檔完善函式介面 include queue.h include include include plistnode buylistnode qdatatype data pnewnode data data...