優先佇列 PriorityQueue

2021-09-24 08:42:53 字數 1136 閱讀 1560

priorityqueue 優先佇列, 採用小頂堆排序實現; 本文主要針對常用的操作 add, poll, peek 進行分析

新增元素 - add
public

boolean

add(e e)

複製**

public

boolean

offer

(e e)

複製**

private

void

grow

(int mincapacity)

複製**

private

void

siftup

(int k, e x)

複製**

private

void

siftupcomparable

(int k, e x)

queue[k] = key;

}複製**

從 siftupcomparable 方法可以看出, 優先佇列採用的是小頂堆實現。

獲取元素並刪除 - poll

public e poll

()複製**

private

void

siftdown

(int k, e x)

@suppresswarnings("unchecked")

private

void

siftdowncomparable

(int k, e x)

queue[k] = key;

}複製**

獲取元素不刪除 - peek
public e peek

()複製**

從 add,poll 方法的實現我們可以看出, 對於優先佇列來說,每次在新增元素時採用上浮,刪除元素時採用下移的操作來保證根節點(也即陣列的首節點)元素為最值,這樣每次從佇列獲取元素時也就是我們業務上優先順序最高的元素。

關於堆排序的實現可參考 堆排序

STL容器 優先佇列priority queue

priority queue顧名思義,是乙個具有權值概念的queue,它和queue一樣允許加入新元素 移除舊元素等功能。由於這是乙個queue,所以只允許在底部加入元素,從頂部取出元素。但優先佇列帶有權值概念,其內的元素自動按照元素的權值排序。權值最高者排在最前面。stl的priority que...

STL初步 優先佇列Priority queue

這個優先到底是如何優先?和普通佇列區別在哪?priority queue type,container,functional priority queue,less q priority queue,less a q priority queue,less b 優先佇列中沒有迭代器 也沒有clear...

優先順序佇列用法詳解(priority queue)

由於優先順序佇列的內部資料結構為堆,所以這裡先介紹堆的一些操作。堆的一些函式操作在algorithm標頭檔案中 在 first,last 範圍內 構造最大堆,first,last 可以是vector指標也可以是陣列指標 make heap first last make heap first las...