最大堆 插入和刪除操作

2021-07-09 12:02:07 字數 741 閱讀 3996

最大堆是一棵完全二叉樹,也是一棵最大樹(即對於每個結點,其關鍵字的值不小於兒子結點的關鍵字值)。

一.堆的儲存結構

typedef struct element;

element

heap[max_elements];

intn=0;

二.在堆中插入元素

void

element_copy( element *ps, element *pd )

void

insert_max_heap( element *pitem )

i = ++(n);

while( (i!=1) && ( pitem->key > heap[i/2].key ) )

element_copy( pitem, heap+i );

}三.在堆中刪除元素

element *

delete_max_heap(  )

element_copy( heap+1, &item );

element_copy( heap+n, &temp );

n--;

parent = 1;

child = 2;

while( child <= n )

element_copy( &temp, heap+parent );

return &item;

}

最大堆插入及刪除

乙個最大堆類似一顆完全二叉樹,從上到下逐層遞減。向乙個最大堆插入資料時,先把數放在堆末尾,和其父母比較後放到合適位置,具體 為 while k 1 data k 2 data k 為新資料的位置從乙個最大堆中取出根節點時,先將根節點和尾子樹交換位置,然後刪除最後一位,對新換上的根節點進行迴圈判斷,先...

最大堆的初始化 插入和刪除

最大堆為完全二叉樹,採用陣列存放資料,父節點的值永遠比左右孩子大,但兄弟之間值的大小並不確定。heap.h ifndef heap h included define heap h included includeusing namespace std int const max 20 templa...

最大堆的刪除

include include typedef struct heapstruct maxheap maxheap create int maxsize 堆的插入 void insert maxheap h,elementtype item i h size for h elements i 2 h...