最小堆具有的性質:最小堆的父親節點比子節點的值小
在最小堆的類中我們定義的函式主要有:維護最小堆、建立最小堆和利用最小堆進行排序
以下是最小堆的定義:
#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,輸出...