堆實現最優佇列

2021-07-15 04:38:15 字數 1369 閱讀 8585

最優佇列就是靠堆實現的,普通的佇列是一種先進先出的資料結構,元素在佇列尾追加,而從佇列頭刪除。在優先佇列中,元素被賦予優先順序。當訪問元素時,具有最高優先順序的元素最先刪除。優先佇列具有最高端先出 (largest-in,first-out)的行為特徵。也就最優佇列可以保證隊頭一定是有限度最大的元素。乙個優先佇列一般滿足以下幾個操作:

insert(s,x):把元素x插入集合s中

maximum(s):返回s中具有最大關鍵字的元素

extract-max(s):去掉並返回s中具有最大關鍵字的元素

increase-key(s,x,k):將元素x的關鍵字增加到k,這裡假設k的值不小於x的關鍵字值

#include#include#define maxsize 5000

using namespace std;

int heapsize;

int heapmaximum(int a)//返回優先佇列中關鍵字最大的元素

void maxheapify(int a, int i)//維護最大堆

}int heapextractmax(int a)//去掉並返回關鍵字最大的元素

void heapincreasekey(int a, int i, int key)//將元素x的關鍵字增加為key,這裡假設key的值不小於原值

}void maxheapinsert(int a, int key)//往優先佇列中插入乙個關鍵字為key的元素

int main()

cout << "max is : " << heapmaximum(heap) << endl;

cout << "heapsize is : " << heapsize << endl;

cout << "drop an item and then the max is : " << heapextractmax(heap) << endl;

cout << "heapsize is : " << heapsize << endl;

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

cout << heap[i] << " ";

cout << endl;

cout << "change the third item's key" << endl;

heapincreasekey(heap, 3, 100);

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

cout << heap[i] << " ";

cout << endl;

cout << "max is : " << heapmaximum(heap) << endl;

return 0;

}

迴圈佇列的最優實現(陣列實現)

1 原理 迴圈佇列就是將佇列儲存空間的最後乙個位置繞到第乙個位置,形成一種理解意義上的環結構,在迴圈佇列結構中,當儲存空間的最後乙個位置已被使用而再要進入隊運算時,只需要儲存空間的第乙個位置空閒,便可將元素加入到第乙個位置,即將儲存空間的第乙個位置作為隊尾。2 迴圈佇列的實現 首先。需要引入兩個指向...

用堆實現優先佇列

堆的性質 1.乙個是他是乙個陣列 當然你也可以真的用鍊錶來做。2.他可以看做乙個完全二叉樹。注意是完全二叉樹。所以他的葉子個數剛好是nsize 2個。3.我使用的下標從1開始,這樣好算,如果節點的位置為i,他的父節點就是i 2,他的左孩子結點就是i 2,右孩子結點就是i 2 1,如果下標從0開始,要...

用堆實現優先佇列

話不多說,先上 include include 定義乙個堆得結構體,struct myheap 調整資料,維持堆得性質,這個和上次heapify的作用一樣 只是這個時從子道父節點這樣的判斷而已。int increasekey myheap pheap,int npos else 否則堆沒有被破壞,退...