堆的基本操作(C 語言版)
複習堆的基本操作的C語言實現,以小頂堆爲例。因爲大頂堆和小頂堆實現的方式差不多,會小頂堆,大頂堆也就會了吧哈哈!
堆的介紹
堆的定義
堆(Heap)就是用數組實現的二叉樹,所以它沒有使用父指針或者子指針。堆根據“堆屬性”來排序,“堆屬性”決定了樹中節點的位置。常見的堆有二叉堆、左傾堆、斜堆、二項堆、斐波那契堆等等。
堆的常用方法:
- 構建優先隊列
- 支持堆排序
- 快速找出一個集合中的最小值(或者最大值)
堆的屬性
堆分爲兩種:最大堆和最小堆,兩者的差別在於節點的排序方式。
最大堆(大頂堆):① 根的值大於左右子樹的值 ② 子樹也是最大堆
最小堆(小頂堆):① 根的值小於左右子樹的值 ② 子樹也是最小堆
這是一個最大堆,,因爲每一個父節點的值都比其子節點要大。10
比 7
和 2
都大。7
比 5
和 1
都大。
堆屬性非常的有用,因爲堆常常被當做優先隊列使用,因爲可以快速的訪問到“最重要”的元素。
我們準備將上面的例子中的樹這樣存儲: