堆實現的優先順序佇列

2021-06-29 14:18:30 字數 1374 閱讀 8029

堆實現的優先順序佇列的主要方法說明:

(1)heap_maximum(int a)   返回中具有最大關鍵字的元素

(2)heap_extract_max(int a)   去掉並返回具有最大關鍵字的元素

(3)heap_increase_key(int a,int i,int k)    將第i個元素的關鍵字值增加到k,k不能小於x的原關鍵字的值

(4)max_heap_insert(int a,int k)  插入關鍵字值為k的新元素

正確理解a.length和heap_size:

a.length是陣列元素中元素的個數,heap_size是存放在a中堆的元素個數。就是說雖然a[0,a.length-1]中都可以包含有效值,但a[heap_size-1] 後的元素都不屬於相應的堆,

此處heap_size <= a.length

注:這句話是摘自演算法導論,**也是按演算法導論實現的。這裡博主為了省事,沒用可變長度陣列,所以直接執行max_heap_insert方法是會報錯的,所以得先返回

並刪除乙個最大值,也就是先呼叫一次

heap_extract_max

注2:按照這程式執行的第三個輸出為:

14 8 10 4 7 9 3 2 1 1

最後的數字1並不是堆中的,這點已經在「正確理解a.length和heap_size」這部分解釋過了,希望能好好理解

package zsy.com;

public class heapsortmethod

system.out.println(" ");

max_heap_insert(a, 15);

for(int i:a)

}public static void max_heapify(int a,int i)else

if(r < heap_size && a[largest] < a[r])

if(largest!=i)

} public static void build_max_heap(int a)

} public static void swap(int a,int i,int j)

//............................................

public static int heap_maximum(int a)

public static int heap_extract_max(int a)

public static void heap_increase_key(int a,int i,int k) }

public static void max_heap_insert(int a,int k)

}

優先順序佇列(堆實現)

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

優先順序佇列(堆實現)

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

堆(優先順序佇列)

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