關於堆的操作

2021-09-01 18:40:08 字數 772 閱讀 9752

最近學習了怎樣構造最大堆和最小堆,小有收穫。

堆有兩個特性:

結構性:用陣列表示的完全二叉樹

有序性:任一結點的關鍵字是其子樹所有節點所有節點的最大值(最小值)

最大堆的初始化

struct heapstruct

;typedef struct heapstruct* maxheap;

maxheap create(int maxsize)//建立堆

堆的插入
void insert(maxheap h,elementtype item)

i=++h->size;//插入的位置

for(;h->elements[i/2]1;i/=2)//(i>1)可省略

h->elements[i]=h->elements[i/2];

h->elements[i]=item;

}

堆的刪除
elementtype delemax(maxheap h)//從最大堆中取出鍵值最大的元素並刪除

maxitem = h->elements[1];

//用最大堆中最後乙個元素從根節點開始向上過濾下層結點

temp=h->elements[h->size--];

for(parent=1;parent*2<=h->size;parent=child)

h->elements[parent]=temp;

return maxitem;

}

L2 012 關於堆的判斷 基本的堆操作

輸出樣例 ft ft就是字串處理很繁瑣別的還好。找到自己的父親的方式,先找到自己的位置,哪乙個i的heap i x,i 1對應的值就是父親的值 includeusing namespace std const int n 1000 5 int heap n 2 n void push int x c...

關於堆的判斷

將一系列給定數字順序插入乙個初始為空的小頂堆h。隨後判斷一系列相關命題是否為真。命題分下列幾種 每組測試第1行包含2個正整數n 1000 和m 20 分別是插入元素的個數 以及需要判斷的命題數。下一行給出區間 10000,10000 內的n個要被插入乙個初始為空的小頂堆的整數。之後m行,每行給出乙個...

關於堆的判斷

將一系列給定數字順序插入乙個初始為空的小頂堆h。隨後判斷一系列相關命題是否為真。命題分下列幾種 每組測試第1行包含2個正整數n 1000 和m 20 分別是插入元素的個數 以及需要判斷的命題數。下一行給出區間 10000,10000 內的n個要被插入乙個初始為空的小頂堆的整數。之後m行,每行給出乙個...