最小堆及基於最小堆的最小優先佇列

2021-08-10 15:42:34 字數 1832 閱讀 1262

最小堆具有的性質:最小堆的父親節點比子節點的值小

在最小堆的類中我們定義的函式主要有:維護最小堆、建立最小堆和利用最小堆進行排序

以下是最小堆的定義:

#ifndef my_min_heap_h

#define my_min_heap_h

#include#includeusing namespace std;

using std::vector;

templateclass myminheap

myminheap(vectorvec)

//構建最小堆

void build_min_heap(vector&vec)

//堆排序

void heapsort(vector&vec, vector&sortedvec)

sortedvec.push_back(vec[0]);

}private:

int getparent(int i)

int getlchild(int i)

int getrchild(int i)

//維護最小堆的性質

void min_heapfy(vector&minheap, int i)

}};#endif

以下是基於最小堆實現的最小優先佇列

最小優先佇列具有的性質有:返回佇列中的最小元素、返回並刪除佇列中的最小元素、向最小優先佇列中插入元素

以下是最小優先佇列類的定義

//最小優先佇列

#ifndef my_min_pri_que_h

#define my_min_pri_que_h

#include"myminheap.h"

#define maxnumber 10000

templateclass myminprique

//返回堆中最小的元素

t heap_minimum()

//刪除並返回最小堆中的元素

t heap_extract_min()

//將i位置的關鍵字增大至value的值

void heap_decrease_key(int i, t value)

} //將關鍵字的值value插入到佇列中

void min_heap_insert(t value)

int sizeof()

};#endif

以下是對最小堆和最小優先佇列的測試:

#include#include"myminheap.h"

#include"myminprique.h"

using namespace std;

int main(void) ;

vectorsortedvec;

myminheapminheap = myminheap();

minheap.heapsort(vec, sortedvec);

for (int i = 0; i < sortedvec.size(); i++)

cout << endl;

*/ vectorvec = ;

myminpriqueminqueue = myminprique(vec);

minqueue.min_heap_insert(20);

int scount = minqueue.sizeof();

vectorminvec;

for (int i = 0; i < scount; i++)

return 0;

}

最小堆,優先佇列

定義乙個list h crud 查詢 堆頂 最小 h 0 0 替換 heapq.heapreplace heap,key,value 參考鏈結 你打算每天 最多 吃乙個蘋果來保證營養均衡。注意,你可以在這 n 天之後繼續吃蘋果。示例 1 思路 模擬即可,堆中用key,value 儲存,保質期和蘋果個...

最小堆以及最小優先佇列的實現

build min heap的實現 最小堆從邏輯上可以理解為乙個完全二叉樹 如圖a所示 最小堆的性質很簡單,即除了根節點以外,所有的節點都要小於其左右子節點,而從物理儲存上看,它是由陣列的形式來儲存的 如圖b所示 最小堆可以應用於最小優先佇列的構建以及堆排序演算法的實現,後面我會繼續更新最小優先佇列...

最小堆建立

題目 實現最小堆兩個功能 1 增加乙個元素 2 輸出並刪除最小堆中的最小的數 輸入 第一行輸入乙個整數t,代表測試資料的組數。對於每組測試資料,第一行輸入乙個整數n,代表操作的次數。每次操作首先輸入乙個整數type。當type 1,增添操作,接著輸入乙個整數u,代表要插入的元素。當type 2,輸出...