資料結構 堆

2022-08-28 11:33:09 字數 1554 閱讀 8763

堆資料結構是一種陣列物件,它可以被視為一棵完全二叉樹結構。

堆結構的二叉樹儲存是最大堆:每個父節點的都大於孩子節點。

最小堆:每個父節點的都小於孩子節點。

1 #include 2 template

3class

heap413

//建堆

14for (int i = (_array.size() - 2)/2; i >= 0; i--)

1518}19

//插入乙個資料x到堆中

20void push(const t&x)

2125

//刪除堆頂元素

26void

pop()

2733 t&gettop()

3438

//將根節點向下調整

39void _adjustdown(int

root)

4049

//與根節點相比

50if (_array[child]>_array[root])

5156

else

5760}61

}62//乙個節點向上調整

63void _adjustup(int

child)

6474

else

7578}79

}80void

print()

8186 cout <88//

判斷是否為空

89bool

empty()

9093

size_t size()

9497

98public

:99 vector_array;

100 };

100w個數中找出最大的前k個數

1

//100w個數中找出最大的前k個數

2#define m 1000000

3#define n 100

4void _adjustdown(int *ma, int k, int

root)513

if (ma[child] 1419

else

2023}24

25}26int* findmaxknum(int* array,int *ma,int size,int

k)27

3233

for (int i = (k - 2) / 2; i >= 0; --i)

3437

for (int i = k; i < size; ++i)

3844}45

return

ma;46}47

void

testfindpreknum()

4855

56int* ret =findmaxknum(array, ma, m,n);

57for (int i = 0; i < n; ++i)

5861 cout <62delete

array;

63delete

ma;64

65 }

資料結構 堆

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

資料結構 堆

資料結構 堆的操作和實現 當應用優先順序佇列或者進行堆排序時,一般利用堆來實現。堆是乙個完全 除最底層 外都是滿的 二叉樹,並滿足如下條件 1 根結點若有子樹,則子樹一定也是堆。2 根結點一定大於 或小於 子結點。因為要求堆必須是完全二叉樹,所以可以用線性的資料結構,比如陣列,來實現堆。利用陣列實現...

資料結構 堆

堆常用來實現優先佇列,在這種佇列中,待刪除的元素為優先順序最高 最低 的那個。在任何時候,任意優先元素都是可以插入到佇列中去的,是電腦科學中一類特殊的資料結構的統稱 最大 最小 堆是一棵每乙個節點的鍵值都不小於 大於 其孩子 如果存在 的鍵值的樹。大頂堆是一棵完全二叉樹,同時也是一棵最大樹。小頂堆是...