c語言實現小根堆

2021-10-22 04:38:15 字數 1391 閱讀 1633

/*

** 小根堆的實現

** 邏輯模型是乙個完全二叉樹 儲存模型是給vector

** 索引下標從0開始

**(1)如果i=0,結點i是根結點,無父結點;否則結點i的父結點為結點(i-1)/2;

**(2)如果2i+1>n-1,則結點i無左子女;否則結點i的左子女為結點2i+1;

**(3)如果2i+2>n-1,則結點i無右子女;否則結點i的右子女為結點2i+2

** 插入乙個元素:新元素被加入到heap的末尾,然後更新樹以恢復堆的次序。從下往上調整

** 刪除乙個元素:為了便於重建堆,實際的操作是將最後乙個資料的值賦給根結點,堆的元素個數-1,然後再從根結點開始進行一次從上向下的調整。

*/

namespace myheap 

minheap

(std:

:vector _data)

}void

insert

(t value)

t pop()

void

swap

(const

int i,

const

int j)

//插入資料需要從下向上調整

//index 從index一直調整到0

void

recorderupwards

(uint index)

}//刪除資料從上向下調整

//從begin位置調整到end位置

void

recorderdownwards

(uint begin,uint end)

else

break;}

else

break;}

} bool empty()

void

print()

std:

:cout << std:

:endl;

} std:

:vector

&get()

const

uint getsize()

};void

test()

; minheap<

int>

h(v)

; h.

print()

;auto datas = h.

get();

uint size = h.

getsize()

;for

(uint i =

0; i < size; i++

) std:

:cout << std:

:endl;

}

c 小根堆陣列實現

主要功能 最小堆排序 大到小 void order 刪除首元素 type fetch root 插入元素 void insert item const type item void insert item faster const type item 快速版本 關鍵 source code file...

C 大根堆與小根堆

c 中,大根堆和小根堆可以使用優先佇列實現。include priority queuepq1 大根堆 priority queue,greater pq2 小根堆該stl支援自定義比較函式,但與sort不同,不支援直接使用lambda函式。自定義的小根堆如下。struct cmp 自定義小根堆 p...

小根堆 陣列實現

特點 父節點永遠比孩子節點小,不強制要求左孩子比右孩子小,但是為了實現方便,我令其左孩子比右孩子小。反之為大根堆。push 插入元素 陣列長度增加 注意 增加的不是本次插入所需要的位置,而是下次元素的位置,這句話能解釋為什麼pop的時候需要 se才能拿到當前堆中的最後乙個元素 從下往上判斷是否滿足小...