資料結構與演算法筆記7 堆

2021-10-05 13:24:33 字數 2934 閱讀 7510

2.堆的儲存結構

3.最大空堆的建立

4.堆的插入

5.堆的刪除

6.最大堆的建立

全部程式

堆(heap)

是用優先佇列(priovity queue)實現的,優先佇列是一種特殊的「佇列」,取出元素順序為優先權(關鍵字)的大小,而不是元素進入佇列的先後順序。

/* 堆的型別定義 */

struct hnode

;typedef heap maxheap;

/* 最大堆 */

typedef heap minheap;

/* 最小堆 */

/* 或者 */

typedef

struct hnode

*heap;

/* 堆的型別定義 */

typedef heap maxheap;

/* 最大堆 */

typedef heap minheap;

/* 最小堆 */

/* ***

注意: 此時僅僅是資料型別的定義,並沒有去分配記憶體空間;

*** */

maxheap createheap

(int maxsize )

插入也就是在完全二叉樹的最後乙個位置新增成員元素。

/*----------- 建造最大堆 -----------*/

;/* 取出根結點存放的最大值 */

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

x = h->data[h->size--];

/* 注意當前堆的規模要減小 */

/* 堆的型別定義 */

struct hnode

;typedef heap maxheap;

/* 最大堆 */

typedef heap minheap;

/* 最小堆 */

#define maxdata 1000

/* 該值應根據具體情況定義為大於堆中所有可能元素的值 */

maxheap createheap

(int maxsize )

bool isfull

( maxheap h )

bool insert

( maxheap h, elementtype x )

i =++h->size;

/* i指向插入後堆中的最後乙個元素的位置 */

for(

; h->data[i/2]

< x; i/=2

) h->data[i]

= h->data[i/2]

;/* 上濾x */

h->data[i]

= x;

/* 將x插入 */

return true;

}#define error -1

/* 錯誤標識應根據具體情況定義為堆中不可能出現的元素值 */

bool isempty

( maxheap h )

elementtype deletemax

( maxheap h )

maxitem = h->data[1]

;/* 取出根結點存放的最大值 */

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

x = h->data[h->size--];

/* 注意當前堆的規模要減小 */

for( parent=

1; parent*

2<=h->size; parent=child )

h->data[parent]

= x;

return maxitem;

}/*----------- 建造最大堆 -----------*/

void

percdown

( maxheap h,

int p )

h->data[parent]

= x;

}void

buildheap

( maxheap h )

資料結構與演算法 堆結構

1 本質 一顆特殊的樹。2 特性 3 分類 對於每乙個節點的值都大於等於子節點的值的情況,該堆被稱為大頂堆。對於每乙個節點的值都小於等於子節點的值的情況,該堆被稱為小頂堆。4 儲存方式 對於完全二叉樹而言,陣列儲存方式是最節省記憶體的。5 插入節點的時間複雜度 將節點插入到靠左的底層作為新的葉子節點...

資料結構與演算法 堆

堆 完全二叉樹,高度為o lgn 基本操作至多和樹的高度成正比,構建堆的時間複雜度是o n 堆是一顆完全二叉樹,假設有n個節點,樹高h log2 n 證明方法如下 1 假設根節點的高度為0,葉子節點高度為h,每層包含元素個數為2 x,x 從0 到h。2 構建堆的過程是自下而上,對於每層非葉子節點需要...

資料結構與演算法 堆

在 演算法設計技巧與分析 這本書的第四章,介紹了堆。於是按照上面的偽 實現了一下。資料結構定義maxheap.hpp如下,1 ifndef max heap hpp 2 define max heap hpp 34 include 5using std vector 67 class maxheap...