C 最小堆 最大堆的構造

2021-10-04 02:15:23 字數 1235 閱讀 5742

// 使用 priority_queue, #include 

// priority_queue 優先佇列,底層資料結構就是紅黑樹。預設是降序排列,所以本身就是乙個最大堆。

#include

#include

using

namespace std;

struct node

friend

bool

operator

<

(const node& a,

const node& b)};

intmain

(int argc,

char

* ar**)

;//

/* do something

*/return0;

}

// 或者

#include

#include

#include

using

namespace std;

struct node};

struct compare};

intmain

(int argc,

char

* ar**)

;return0;

}

// 使用 multiset

#include

#include

#include

using

namespace std;

struct node};

struct compare};

intmain()

;// 最小堆

multiset m_set

;// set和multiset底層都是紅黑樹。compare是自定義的排序(自定義為公升序),所以m_set是乙個最小堆。

for(

int i =

0; i < nums.

size()

; i++

)for

(auto it = m_set.

begin()

; it != m_set.

end(

); it++

) cout << it-

>value << endl;

return0;

}// set會自動去重,multiset允許重複資料。

最大堆 最小堆

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

最大堆 最小堆

堆的定義是 n個元素的序列,當且僅當滿足如下關係時被成為堆 1 ki k2i 且 ki k2i 1 或 2 ki k2i 且 ki k2i 1 i 1,2,n 2 當滿足 1 時,為最小堆,當滿足 2 時,為最大堆。若將此序列對應的一維陣列堪稱是乙個完全二叉樹,則2i和2i 1個節點分別是節點i的左...

最大堆 最小堆

堆的定義是 n個元素的序列,當且僅當滿足如下關係時被成為堆 1 ki k2i 且 ki k2i 1 或 2 ki k2i 且 ki k2i 1 i 1,2,n 2 當滿足 1 時,為最小堆,當滿足 2 時,為最大堆。若將此序列對應的一維陣列堪稱是乙個完全二叉樹,則2i和2i 1個節點分別是節點i的左...