資料結構 堆的操作

2021-09-25 09:48:00 字數 599 閱讀 7745

堆是指乙個完全二叉樹,它的某個結點的值總是不大於,或不小於其父節點的值,堆分為大堆和小堆,小堆堆頂元素一定是最小的,堆頂到每個葉子結點的路徑是公升序的,大堆則相反。

堆的操作主要包括堆的建立,插入元素,刪除元素,返回堆頂元素等操作,其中,堆的建立要用到向下調整演算法,插入要用到向上調整演算法,具體操作如下:

typedef int (*pfc)(datatype left, datatype right);
int less(datatype left, datatype right)//按照小於的方式進行比較,就是建小堆

int greater(datatype left, datatype right)//按照大於的方式進行比較,就是建大堆

//建小堆和建大堆實現起來為了方便,可以使用函式指標

void adjustdown(datatype* a, int size, int parent,pfc pfc)

if (pfc(a[parent], a[child]))//parent與比較小的孩子相比

else

return;

}}

這樣使用者就可以根據所需要的來建立堆。

資料結構堆的基本操作實現

堆 其實就是一棵完全二叉樹 見下圖 在陣列中的實現 堆分為大根堆和小根堆 大根堆 1.根節點最大 2.子節點必須大於等於父節點 小跟堆 1.根節點最小 2.子節點必須小於等於父節點 在陣列中儲存這種結構時,總是習慣將根節點儲存在陣列下標為1的位置 每乙個下標為k的節點的父節點的下標就是k 2 每乙個...

資料結構 堆

最大堆 最小堆 堆的定義是 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 根結點一定大於 或小於 子結點。因為要求堆必須是完全二叉樹,所以可以用線性的資料結構,比如陣列,來實現堆。利用陣列實現...