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

2022-03-07 23:29:05 字數 2206 閱讀 2663

由於優先順序佇列的內部資料結構為,所以這裡先介紹堆的一些操作。

堆的一些函式操作在algorithm標頭檔案中

//在[first, last)範圍內

構造最大堆,first,last 可以是vector指標也可以是陣列指標

make_heap(first ,last)

make_heap(first ,last, cmpobject)

預設情況下是建立最大堆,即首元素為兩個位址間的最大值。預設為less,可以改為greater即為建立最小堆

pop_heap(first ,last)

pop_heap(first ,last, cmpobject)

將front(即第乙個最大元素)移動到end的前部,同時將剩下的元素重新構造成(堆排序)乙個新的heap。

push_heap(first ,last)

push_heap(first ,last, cmpobject)

對剛插入的(尾部)元素做堆排序。在進行push_heap操作之前,除了最後乙個元素以外的其他元素必須構成乙個最大堆,

否則會報錯。

sort_heap(first ,last)

sort_heap(first ,last, cmpobject)

將乙個堆做排序,最終成為乙個有序的系列,可以看到sort_heap時,必須先是乙個堆(兩個特性:1、最大元素在第乙個 2、新增或者刪除元素以對數時間),因此必須先做一次make_heap.

先寫乙個用 stl 

裡面堆演算法實現的與真正的

stl裡面的

priority_queue 

用法相似的 priority_queue,

以加深對

priority_queue 

的理解

#include #include 

#include

using

namespace

std;

class

priority_queue

void

pop()

int top()

int size()

bool empty() };

intmain()

return0;

}

模板宣告帶有三個引數,priority_queue

type 為資料型別, 

container 

為儲存資料的容器, 

functional 

為元素比較方式。

container 必須是用陣列實現的容器,比如 

vector, deque 

但不能用

list.

stl裡面預設用的是

vector. 

比較方式預設用

operator

所以如果你把後面倆個

引數 預設的話,優先佇列就是大頂堆,隊頭元素最大。

下面的程式為建立乙個最小堆的例子 priority_queue,greater> q;

#include #include 

using

namespace

std;

intmain()

getchar();

return0;

}

view code

自定義型別node的優先順序佇列,過載比較運算子'

#include #include 

using

namespace

std;

struct

node};

bool

operator

intmain()

getchar();

return0;

}

view code

過載『這種型別,原因是greater沒有定義,要想定義上述形式必須定義乙個比較的類cmp,具體實現如下**。

#include #include 

using

namespace

std;

struct

node};

struct

cmp};

intmain()

getchar();

return0;

}

view code

佇列與優先順序佇列詳解!

今天講優先佇列 簡單易懂 首先講什麼是佇列 佇列與棧往往會放到一起去講,棧是一種先進後出 filo 的資料結構,而佇列,則是一種先進先出的資料結構 fifo 那麼什麼是先進先出呢?就像是你去食堂排隊打飯,你先到了,就先排上隊伍,然後先打上飯,自然而然也就先離開隊伍去餐桌恰飯!我們這篇blog主要講應...

佇列 優先順序佇列

優先順序佇列的隊尾是不需要改變的,永遠在低下標處。當佇列增加資料時,隊頭的位置就是資料項的大小減去1.public class priorityq 插入 public void insert long item else quearray j 1 item nitem 刪除 public long ...

優先順序佇列

分為最小優先順序佇列和最大優先順序佇列。優先順序佇列是一種用來維護一組元素構成的集合s的資料結構,這一組元素都有乙個關鍵字key,乙個最大優先順序佇列支援的操作 insert s,x 把x插入到集合s中 maxmum s 返回s中最大元素 extra max s 去掉s中最大關鍵字並返回該最大關鍵子...