基於大頂堆實現的最大優先順序佇列

2021-06-16 08:19:47 字數 1347 閱讀 3631

最大優先順序佇列有著以下操作:

1.返回最大值:heap_maximum

2.去掉最大值並返回:heap_extract_max

3.將i的關鍵值增加到key:heap_increase_key

4.向優先佇列中插入乙個結點:max_heap_insert

演算法**及測試**如下:

#include #include #include #define max 1000

//函式原型

void max_heapify(int a,int i,int length);

void swap(int *a,int *b);

int heap_maximum(int a);

void build_max_heap(int a,int n);

int heap_extract_max(int a,int &n);

int parent(int i);

void heap_increase_key(int a,int i,int key);

void max_heap_insert(int a,int &n,int key);

int main()

;//除test[0]外,10個測試資料

int n=10;

build_max_heap(test,10);//建立大頂堆

int result=heap_extract_max(test,n);

max_heap_insert(test,n,111);

for(int i=1;i<11;i++)

printf("%d ",test[i]);

getch();

}//保持大頂堆性質

void max_heapify(int a,int i,int length)

//交換

void swap(int *a,int *b)

//返回最大值

int heap_maximum(int a)

//去掉並返回最大值

int heap_extract_max(int a,int &n)

//將i的關鍵值增加到key,key應該大於a[i]

void heap_increase_key(int a,int i,int key) }}

//求parent結點的關鍵值

int parent(int i)

//向優先佇列中插入乙個結點

void max_heap_insert(int a,int &n,int key)

總結:最大優先順序佇列主要用於作業排程,當某一作業完成或被終端時,選擇出具有最高優先順序的作業。相對的還有最小優先順序佇列。

優先順序佇列(堆實現)

一 優先順序佇列定義 二 方法實現 獲得最大元素方法 去掉最大元素方法 修改優先順序方法 新增節點 三 實現 用堆實現乙個優先順序佇列 主要是新增 修改 刪除節點 節點具有唯一性 author hhf 2014年11月28日 public class priorityqueue 返回優先佇列中優先順...

優先順序佇列(堆實現)

優先順序佇列 概念 一般來說我們會根據事情的重要程度優先處理某事,比如完成學習任務和刷微博,我們會認為完成學習任務比較重要,因此會先執行它,因此在這種情況下,資料結構就應提供兩個基本的操作,一是返回最高優先順序物件,二是新增新的物件,這種資料結構就叫做優先順序佇列。二叉樹的順序儲存 儲存方式 使用陣...

堆實現的優先順序佇列

堆實現的優先順序佇列的主要方法說明 1 heap maximum int a 返回中具有最大關鍵字的元素 2 heap extract max int a 去掉並返回具有最大關鍵字的元素 3 heap increase key int a,int i,int k 將第i個元素的關鍵字值增加到k,k不...