最小堆,是一種經過排序的完全二叉樹,其中任一非終端節點的資料值均不大於其左子節點和右子節點的值。
通俗的說就是:
1.陣列來實現二叉樹,所以滿足二叉樹的特性。
2.根元素是最小的元素,父節點小於它的兩個子節點。
3.樹中的元素是相對有序的。
如何實現堆的相對有序是關鍵。
插入元素時,插入到陣列中的最後乙個元素的後面,然後與該節點的父節點比較大小。如果插入的元素小於父節點元素,那麼與父節點交換位置。然後插入元素交換到父節點位置時,又與該節點的父節點比較,直到大於父節點元素或者到達堆頂。該過程叫做上浮,即插入時上浮。
移除元素時,只能從堆頂移除元素,再取最後乙個元素放到堆頂中。然後堆頂節點與子節點比較時,先取子節點中的較小者,如果堆頂節點大於較小子節點,那麼交換位置。此時堆頂節點元素交換到較小子節點上。然後再與其較小子節點比較,直到小於較小子節點或者到達葉子節點為止。該過程叫做下沉,即移除元素時下沉。
附上乙個簡單的最小堆插入**:
#include
#define maxn
1005
#define mindata
-10005
int data[
maxn
], size;
void
insert
(int x)
int main()
while(m
--)printf
("\n");
}return0;
}
二叉堆(最小堆)的C語言實現
本 參考 漫畫演算法 一書,作者魏夢書。先說一下環境,win10,vs2017,不使用預編譯頭。本 使用陣列 也可以使用鍊錶 構建二叉堆,二叉堆是一種特殊的完全二叉樹,所以父節點索引和子節點索引符合以下公式 children left parent2 1 children right parent2...
C 最小堆實現
mini heap.h pragma once include template class mini heap node heap 最小堆 uint32 t max size 最大儲存數 uint32 t size 儲存數 擴容 void expansion 刪除指定下標節點 void del n...
最大堆最小堆的實現 C語言
堆是特殊的佇列,從堆中取元素是按照元素的優先順序大小,而不是元素進入佇列的先後順序。因此,堆也通常被稱為 優先佇列 堆的最常用結構是用二叉樹表示,不特指的話,他是一棵完全二叉樹。因此通常不必用指標,而是用陣列來實現堆的儲存。我們 知道,完全二叉樹用陣列來表示,就相當於把全完二叉樹的層序遍歷依次存入陣...