優先佇列(堆)

2021-09-10 02:12:20 字數 2017 閱讀 7746

maximum(s):

int heap_maximum

(int a)

extract-max(s):

int heap_extract_max

(int a)

insert(s,x):

void

max_heap_insert

(int a[

],int key)

increase-key(s,x,k):

void

heap_increase_key

(int a[

],int i,int key)

a[i]

= key;

while

(i>

0&& a[

parent

(i)]

)}

完整原始碼:

#include 

int length =10;

//陣列長度

int heapsize;

//堆大小

int parent

(int i)

int left

(int i)

int right

(int i)

void

exchange

(int a[

],int m,int n)

void

max_heapify

(int a[

],int i)

}void

build_max_heapify

(int a)

}void

heapsort

(int a)

} int heap_maximum

(int a)

int heap_extract_max

(int a)

void

heap_increase_key

(int a[

],int i,int key)

a[i]

= key;

while

(i>

0&& a[

parent

(i)]

void

max_heap_insert

(int a[

],int key)

int main()

; int i;

for(i=

0;i<

10;i++

)printf

("\n將無序陣列轉換為最大堆\n");

build_max_heapify

(a);

// max_heapify(a,1);

for(i=

0;i)printf

("\n堆的最大值為%d\n"

,heap_maximum

(a))

; int m =

heap_extract_max

(a);

printf

("\n堆將最大值摘掉之後:\n");

for(i=

0;i)heap_increase_key

(a,5,28

);printf

("\n將堆的第五個值增加為28:\n");

for(i=

0;i)max_heap_insert

(a,13);

printf

("\n增加堆乙個值為13:\n");

for(i=

0;i)heapsort

(a);

printf

("\n將最大堆轉換為有序陣列\n");

for(i=

0;i<

10;i++

)return0;

}

參考:《演算法導論》

(如有不當之處請大佬指正)

優先佇列《堆》

1.模型 兩個基本操作 insert等價enqueue deletemin刪除最小者 dequeue 2.簡單的實現 1 簡單鍊錶 遍歷刪除min或者排序刪除min 2 使用二叉查詢樹。反覆除去min會使得樹不平衡,並且bst還支援許多不需要的操作。3.二叉堆 優先佇列的實現普遍使用二叉堆,堆有兩個...

優先佇列 堆

印表機列印作業一般是放在佇列中的。如果按照先來先列印的順序,有乙個100頁的列印任務,那麼會讓後面短小的任務等待很長時間。更合理的做法也許是最後處理最耗時的列印任務,不管它是不是最後提交上來的。在多使用者作業系統中,作業系統讓哪個程式使用cpu,是需要決定從佇列裡面選擇的。一般做法是從隊頭獲得程式,...

優先佇列 堆

優先佇列 佇列是乙個操作受限的線性表,資料只能在一端進入,另一端出來,具有先進先出的性質。有時在佇列中需要處理優先順序的情況,即後面進入的資料需要提前出來,這裡就需要優先佇列。優先佇列是至少能夠提供插入和刪除最小值這兩種操作的資料結構。對應於佇列的操作,插入相當於入隊,刪除最小相當於出隊。鍊錶,二叉...