堆 學習記錄

2021-08-08 23:57:17 字數 464 閱讀 3107

此處預設二叉大根堆

描述:一棵樹,完全二叉(i的左孩子為2i,右為2i+1),對於每個節點,它的孩子鍵值小於它,優先佇列就是用堆實現的 

性質:1.樹根為最大點(堆頂),故不斷重複 取頂→刪頂就能得到排序序列(堆排序)

2.此結構決定了不能在裡面找任意元素(陣列實現不服)或者迭代,(所以stl的優先佇列不能用這倆操作)

操作:1.基礎操作:節點的上浮與下沉:

上浮:乙個節點,若其父親小於它,交換它和它父親,重複執行

下沉:乙個節點,若其孩子大於它,交換它和它的值大的兒子,重複執行

宣告「最後乙個節點」:最下層最右邊那個節點

2.插入節點:把這個點作為最後乙個節點插入,然後對他進行上浮

3.刪除節點:把最後乙個節點的值賦到這個節點上並刪除最後那個節點,然後下沉(問題又回到了怎麼找這個節點上)

4.對乙個數組建堆:將此陣列看做陣列實現的堆,從後向前乙個個執行上浮的操作

學習記錄 堆

堆是一種特殊的完全二叉樹,我們在構造二叉查詢樹的時候,保持左子樹 根節點 右子樹,而最大堆和最小堆則是要求根節點大於或小於所有子節點。由於堆是一種完全二叉樹,所以可以用線性陣列儲存,假設根節點為1,父節點為n,則左子節點為2 n,右子節點為2 n 1 1.堆的插入 統一在陣列末端進行插入,然後比較子...

學習筆記 堆

heap 堆 堆是一種建立在樹上的結構,是一種完全二叉樹型的資料結構,目前了解到的應用是堆排序,然後用於實現優先佇列。堆的特點是,子結點一定比父結點大或者小於父結點。其中,所有子結點都小於父結點的堆是最大二叉堆,子結點小於父結點的是最小二叉堆。堆的核心是heapify,維護堆合法性的演算法 後續談到...

學習筆記 堆

include include typedef struct node minheap 初始化乙個堆 void create minheap h,int maxsize bool isfull minheap h 往堆裡插入資料,其實可以直接在主程式裡輸入就行了 void insert minhea...