經典資料結構之最大堆

2021-06-23 02:42:03 字數 1684 閱讀 1934

最大堆和最小堆是常用的優先佇列。 其概念也比較簡單,用樹的方式描述,就是,父節點比子節點大(最大堆),小則為最小堆。最大堆和最小堆廣泛用在有先後順序的任務排程中。比如cpu的任務排程等。

先上**,後面再詳細解釋和補充我的看法。

標頭檔案

#ifndef cbinarytree_h_included

#define cbinarytree_h_included

#include templateclass cmaxheap

;templatecmaxheap::cmaxheap(int maxsize) :

m_nmaxsize(maxsize), m_nlen(0)

templatecmaxheap& cmaxheap::minsert(const t& val)

t date = val;

++ m_nlen;

int cur = m_nlen; // empty pos

while(cur > 1 && m_pelems[cur / 2] < date)

m_pelems[cur] = date;

return *this;

}templatevoid cmaxheap::mprint()

}templatecmaxheap& cmaxheap::mdelete(t& data)

data = m_pelems[1];

t val = m_pelems[-- m_nlen];

int i = 1;

int ci = 2;

while( ci <= m_nlen)

m_pelems[i] = val;

return *this;

}templatevoid cmaxheap::minit(t vals, const int& arraysize, const int& maxsize)

m_pelems[ci / 2] = val;

}}#endif // cbinarytree_h_included

測試檔案

#include "cbinarytree.h"

#include int main(int argc, char* argv)

heap.mprint();

std::cout << "start delete" << std::endl;

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

// heap2 to test init

std::cout << "for heap 2" << std::endl;

int data = ;

cmaxheapheap2(100);

heap2.minit(data, sizeof(data) / sizeof(int), 40);

heap2.mprint();

system("pause");

return 0;

}

輸出結果:

14

start delete

4134

2824

1917128

00for heap 2

4017307

31064

20

其實刪除的思想就是堆排序思想。

最大堆資料結構

儲存結構 堆中元素在陣列中是按照完全二叉樹層序儲存的。陣列起始結點為1。下標特點 對於下標為i的結點,i 2為父節點,左右子結點分別為2i和2i 1。最大堆特點 任一結點的值大於或者等於其子結點的值。最小堆特點 任一結點的值小於或者等於其子結點的值。include include define ma...

資料結構之最大子串

給定整數串,a 1,a 2,a n,求最大子串的問題,下面給出三種方法 include include include vector1.h include tree.h using namespace std int maxsubsequence int numarr,int len 方法1 int...

資料結構 最大堆排序 python實現

二叉 堆資料結構是一種陣列物件。可以被視為一棵完全二叉樹。數中每個節點與陣列中存放該節點值的那個元素對應。樹的每一層都是填滿的。最後一層可能除外 最後一層從乙個節點的左子樹開始填 引用自 演算法導論 再抄一遍複習一下 從無序的陣列構建乙個完整的堆,最好及最壞的情況下,建立堆時間複雜度均為o nlgn...