最小堆的插入(C語言實現)

2021-10-02 13:20:36 字數 770 閱讀 7201

最小堆,是一種經過排序的完全二叉樹,其中任一非終端節點的資料值均不大於其左子節點和右子節點的值。

通俗的說就是:

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語言

堆是特殊的佇列,從堆中取元素是按照元素的優先順序大小,而不是元素進入佇列的先後順序。因此,堆也通常被稱為 優先佇列 堆的最常用結構是用二叉樹表示,不特指的話,他是一棵完全二叉樹。因此通常不必用指標,而是用陣列來實現堆的儲存。我們 知道,完全二叉樹用陣列來表示,就相當於把全完二叉樹的層序遍歷依次存入陣...