小根堆 陣列實現

2021-10-08 03:23:24 字數 1241 閱讀 8366

特點:父節點永遠比孩子節點小,不強制要求左孩子比右孩子小,但是為了實現方便,我令其左孩子比右孩子小。反之為大根堆。

push:插入元素

陣列長度增加(注意:增加的不是本次插入所需要的位置,而是下次元素的位置,這句話能解釋為什麼pop的時候需要 - -se才能拿到當前堆中的最後乙個元素)

從下往上判斷是否滿足小根堆特點,每次上移都是從當前節點移動到父節點,注意:是位置移動,真正的值不移動。

pop:刪除元素

得到最後乙個元素的值

從根節點往下判斷是否滿足小根堆特點,每次下移都是當前節點移動到左孩子節點,注意:是位置移動,真正的值不移動。

**實現:

#include

#include

#include

#include

using

namespace std;

int heap[

100]

,se =0;

//堆的最大長度和位置

//插入

void

push

(int x)

heap[i]

= x;

}//刪除

intpop()

//如果沒有大小顛倒就退出

if(heap[l]

>= x)

break

;//將孩子數值提到根節點去

heap[i]

= heap[l]

; i = l;

} heap[i]

= x;

return ret;

}//小根堆的實現

intmain()

for(

int i =

0;i < se;i++

)printf

("\npop操作後:\n");

printf

("pop內容為:%d\n"

,pop()

);printf

("堆中內容為:");

for(

int i =

0;i < se;i++

)printf

("\npop內容為:%d\n"

,pop()

);printf

("堆中內容為:");

for(

int i =

0;i < se;i++

)return0;

}

c 小根堆陣列實現

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

堆(大根堆 小根堆)

堆又可稱之為完全二叉堆。這是乙個邏輯上基於完全二叉樹 物理上一般基於線性資料結構 如陣列 向量 鍊錶等 的一種資料結構。學習過完全二叉樹的同學們都應該了解,完全二叉樹在物理上可以用線性資料結構進行表示 或者儲存 例如陣列int a 5 就可以用來描述乙個擁有5個結點的完全二叉樹。那麼基於完全二叉樹的...

堆(Heap)大根堆 小根堆

具有以下的特點 1 完全二叉樹 2 heap中儲存的值是偏序 min heap 父節點的值小於或等於子節點的值 max heap 父節點的值大於或等於子節點的值 一般都用陣列來表示堆,i結點的父結點下標就為 i 1 2。它的左右子結點下標分別為2 i 1和2 i 2。如第0個結點左右子結點下標分別為...