優先順序佇列(堆)的原理及其實現

2021-10-01 21:14:11 字數 1097 閱讀 9011

在很多應用中,我們通常需要按照優先順序情況對待處理物件進行處理,比如首先處理優先順序最高的物件,然後處理次高的物件。最簡單的乙個例子就是,在手機上玩遊戲的時候,如果有來電,那麼系統應該優先處理打進來的**。在這種情況下,我們的資料結構應該提供兩個最基本的操作,乙個是返回最高優先順序物件,乙個是新增新的物件。這種資料結構就是優先順序佇列(priority queue)

public class priorityqueue 

}//向上調整,已知子節點座標,index代表當前節點,parent代表父節點,比較大小,大的在堆頂

private static void shiftup(int array,int index)

int flag=array[parent];

array[parent]=array[index];

array[index]=flag;

index=parent;}}

//當超過了當前容量,進行擴容

private void grow(int mincapacity)

int oldcapacity=array.length;

int newcapacity=oldcapacity+oldcapacity/2;

array=arrays.copyof(array,newcapacity);

}//從堆尾開始新增元素,然後向上調整

public boolean offer(int e)

if(i==0)else

return true;

}//從堆頂取出元素,堆頂元素,暫時用堆尾元素替代

public int poll()

public int peek()

public string tostring()

public static void main(string args)

system.out.println(queue);

}}

來試試效果

[11, 9, 10, 6, 8, 5, 4, 0, 3, 2, 7, 1]

process finished with exit code 0

優先順序佇列(堆實現)

一 優先順序佇列定義 二 方法實現 獲得最大元素方法 去掉最大元素方法 修改優先順序方法 新增節點 三 實現 用堆實現乙個優先順序佇列 主要是新增 修改 刪除節點 節點具有唯一性 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不...