堆 優先順序序列

2021-10-06 05:18:50 字數 2156 閱讀 1279

如果有乙個關鍵碼的集合k = ,把它的所有元素按完全二叉樹的順序儲存方式儲存

在乙個一維陣列中,並滿足:ki <= k2i+1 且 ki<= k2i+2 (ki >= k2i+1 且 ki >= k2i+2) i = 0,1,2…,則稱為

小堆(或大堆)。將根節點最大的堆叫做最大堆或大根堆,根節點最小的堆叫做最小堆或小根堆。

性質

堆中某個節點的值總是不大於或不小於其父節點的值;

堆總是一棵完全二叉樹

堆的實現及堆排序

common.h

#ifndef _common_h_

#define _commom_h_

#include

#include

#include

#include

#include

#include

#define elemtype char

void

swap

(elemtype *a, elemtype *b)

#endif

/*_commom_h_*/

heap.h

#ifndef _heap_h_

#define _heap_h_

#include

"common.h"

#define heapdatatype int

typedef

struct heap

heap;

void

heapinit

(heap *php,

int n)

;void

minheapinsert

(heap *php, heapdatatype x)

;heapdatatype minheapremove

(heap *php)

;bool heapempty

(heap *php)

;void

(heap *php)

;void

heapsort

(heap *php)

;void

adjustup

(heapdatatype *base,

int start)

;void

adjustdown

(heapdatatype *base,

int start,

int n)

;//初始化

void

heapinit

(heap *php,

int n)

bool heapempty

(heap *php)

//插入元素

void

minheapinsert

(heap *php, heapdatatype x)

}//小堆

heapdatatype minheapremove

(heap *php)

void

(heap *php)

//向上插入

void

adjustup

(heapdatatype *base,

int start)

else

break;}

base[j]

= tmp;

}//向下插入

void

adjustdown

(heapdatatype *base,

int start,

int n)

else

break;}

}//堆排序

void

heapsort

(heap *php,

int ar,

int n)

//排序

int end = n -1;

while

(end >0)

int k = php->size -1;

for(

int i =

0; i++i)

}#endif

/* _heap_h_ */

堆(優先順序佇列)

c 的 stl 中提供了 優先佇列 這一容器,它和普通的 fifo 佇列都定義在 中,有 push 和 pop 過程,分別表示 往佇列裡加入新元素 和 從佇列裡刪除隊首元素 唯一的區別是,在優先佇列中,元素並不是按照進入佇列的先後順序排列,而是按照優先順序的高低順序排列 換句話說,pop 刪除的是優...

堆 優先順序佇列

1一般二叉樹的順序儲存 層序遍歷方式 使用陣列儲存二叉樹結構,即將二叉樹 按照層序遍歷 的方式放入陣列.這種方式一般只適用於完全二叉樹,一般的二叉樹會造成空間浪費比較嚴重.2堆 heap 在邏輯上就是乙個 完全二叉樹,在物理上儲存在 陣列 中.1 滿足任意結點的值都大於其子樹的結點的值.叫做大堆,反...

優先順序佇列 堆

1.1 堆的概念 堆邏輯上是一棵完全二叉樹 堆物理上是儲存在陣列中位元科技 滿足任意結點的值都大於其子樹中結點的值,叫做大堆,或者大根堆,或者最大堆 反之,則是小堆,或者小根堆,或者最小堆 堆的基本作用是,快速找集合中的最值 1.2儲存方式 使用陣列儲存二叉樹結構,方式是將二叉樹用層序遍歷方式放入陣...