堆的實現及相關操作

2021-10-05 08:02:50 字數 2233 閱讀 9038

堆:是一種特殊的完全二叉樹

大堆:左右孩子結點均小於父親結點

小堆:左右孩子結點均大於父親結點

用順序表來表示堆

typedef

int hpdatatype;

typedef

struct heap

heap;

堆的建立

void

heapcreat

(heap* hp,hpdatatype* array,

int size)

}

大堆的向下調整

//交換函式

void

swap

(hpdatatype* array,

int left,

int right)

void

shiftdownb

(hpdatatype* array,

int size,

int parent)

else

break;}

}

大堆的向上調整

void

shiftupb

(hpdatatype* array,

int child)

else

//結束調整

break;}

}

小堆的向下調整

void

shiftdownl

(hpdatatype* array,

int size,

int parent)

else

break;}

}

小堆的向上調整

void

shiftupl

(hpdatatype* array,

int child)

else

//結束調整

break;}

}

堆的插入

void

(heap* hp, hpdatatype data)

//尾插

hp->_array[hp->_size++

]= data;

shiftupb

(hp->_array, hp->_size -1)

;}

堆頂元素的刪除(也就是刪除堆中的最值(大堆有最大值,小堆有最小值))

基本步驟:

1.對頂元素與最後乙個葉子結點交換

2.然後進行刪除操作

3.最後在進行向下調整操作

void

(heap* hp)

}

獲取堆頂元素

hpdatatype heaptop

(heap* hp)

堆的銷毀

void

heapdestory

(heap* hp)

堆排序(公升序)

每次都把大堆的根結點放到陣列最後乙個位置,再進行向下調整

void

heapsort1

(int

* array,

int n)

//排序: 迴圈尾刪 : nlogn

int size = n;

while

(size >1)

}

堆排序(降序)

每次都把小堆的根結點放到陣列最後乙個位置,再進行向下調整

void

heapsort2

(int

* array,

int n)

//排序: 迴圈尾刪 : nlogn

int size = n;

while

(size >1)

}

獲取堆中(堆有n個元素)最大的k個元素

void

printtopk

(int

* array,

int n,

int k)

}for

(int i =

0; i < k;

++i)

}

C heap堆的相關操作及跟蹤除錯案例

include 標頭檔案 make heap 建堆,最大值在所給範圍的最前面,其他位置不確定 pop heap 將堆頂 所給範圍最前面 元素移到所給範圍的最後,並將餘下的最大的元素放在最前面 pop back 將所給範圍的最後乙個元素刪除 push back 在所給範圍的末尾加入新的元素 push ...

四 c 中的演算法 排序及相關操作 堆操作

堆 是一種組織序列元素的方式。堆的內部資料結構是二叉樹。兩大性質 1.堆的第乙個元素通常是最大的元素 2.能夠在對數時間內增加或移除乙個元素 堆的操作演算法 push heap pop heap sort heap make heap 等等 函式模型 template class randomit ...

堆操作及應用

1.堆是乙個完全二叉樹,堆主要設計到的操作有插入,刪除,堆化。2.堆的主要應用有堆排序 從小到大排序,使用大頂堆 從大到小排序,使用小頂堆。3.下面以大頂堆為例,給出實現 view code 1 include 2 include 3 4using namespace std 56 大頂堆的實現 7...