#include
using
namespace std;
typedef
class
poinner
* on;
class
poinner
;on create
(int maxsize)
bool
isempty
(on head)
bool
isfull
(on head)
void
insert
(on head,
int val)
//下面for迴圈所做操作有:
>size自加一
指向插入後堆中的最後乙個位置
//3.向下過濾結點,也就是將i的上面小於val(插入值)的結點從後往前逐個向後移,迴圈結束時i指向val應當插入的位置
for(i=
++head-
>size;head-
>poin[i/2]
)head-
>poin[i]
=head-
>poin[i/2]
; head-
>poin[i]
=val;
//將i插入
}int
deletepoin
(on head)
int parent,child,max,temp;
max=head-
>poin[1]
;//儲存要刪除的元素
temp=head-
>poin[head-
>size--];
//使temp儲存陣列最後乙個元素的值並使陣列長度減一,變相等於刪除了最後乙個元素(因為不能再訪問它了)
for(parent=
1;parent*
2<=head-
>size;parent=child)
head-
>poin[parent]
=temp;
//插入temp
return max;
//返回最大值
}int
size
(on head)
intmain()
堆的簡單實現
堆資料結構是一種陣列物件,可被視為一顆完全二叉樹 堆結構的二叉樹儲存 最大堆 父 子 最小堆 父 子 如下圖,先建立乙個大堆 下面用 模擬實現乙個大堆 插入 頭刪 include include include using namespace std template class heap heap...
C語言之堆的簡單操作實現
一 堆的概念 1 定義 如果有乙個關鍵碼的集合k 把它的所有元素按完全二叉樹的順序儲存方式儲存在乙個一維陣列中,並滿足 ki k2i 1 且 ki k2i 2 ki k2i 1 且 ki k2i 2 i 0,1,2 則稱為小堆 或大堆 將根節點最大的堆叫做最大堆或大根堆,根節點最小的堆叫做最小堆或小...
C 堆的實現
堆是乙個完全二叉樹。堆根據元素的排列方式,可以分為最大堆 max heap 和最小堆 min heap 其中 堆並不歸屬於stl庫容器元件,而是作為優先佇列 priority queue 的底層實現。堆是一種完全二叉樹,整棵二叉樹除了最底層的葉子節點之外是填滿的,而最底層的葉子節點由左至右是沒有空隙...