由於優先順序佇列的內部資料結構為堆,所以這裡先介紹堆的一些操作。
堆的一些函式操作在algorithm標頭檔案中
//在[first, last)範圍內預設情況下是建立最大堆,即首元素為兩個位址間的最大值。預設為less,可以改為greater即為建立最小堆構造最大堆,first,last 可以是vector指標也可以是陣列指標
make_heap(first ,last)
make_heap(first ,last, cmpobject)
pop_heap(first ,last)將front(即第乙個最大元素)移動到end的前部,同時將剩下的元素重新構造成(堆排序)乙個新的heap。pop_heap(first ,last, cmpobject)
push_heap(first ,last)對剛插入的(尾部)元素做堆排序。在進行push_heap操作之前,除了最後乙個元素以外的其他元素必須構成乙個最大堆,push_heap(first ,last, cmpobject)
否則會報錯。
sort_heap(first ,last)將乙個堆做排序,最終成為乙個有序的系列,可以看到sort_heap時,必須先是乙個堆(兩個特性:1、最大元素在第乙個 2、新增或者刪除元素以對數時間),因此必須先做一次make_heap.sort_heap(first ,last, cmpobject)
先寫乙個用 stl
裡面堆演算法實現的與真正的
stl裡面的
priority_queue
用法相似的 priority_queue,
以加深對
priority_queue
的理解
#include #include模板宣告帶有三個引數,priority_queue#include
using
namespace
std;
class
priority_queue
void
pop()
int top()
int size()
bool empty() };
intmain()
return0;
}
type 為資料型別,
container
為儲存資料的容器,
functional
為元素比較方式。
container 必須是用陣列實現的容器,比如
vector, deque
但不能用
list.
stl裡面預設用的是
vector.
比較方式預設用
operator
所以如果你把後面倆個
引數 預設的話,優先佇列就是大頂堆,隊頭元素最大。
下面的程式為建立乙個最小堆的例子 priority_queue,greater> q;
#include #includeview codeusing
namespace
std;
intmain()
getchar();
return0;
}
自定義型別node的優先順序佇列,過載比較運算子'
#include #includeview codeusing
namespace
std;
struct
node};
bool
operator
intmain()
getchar();
return0;
}
過載『這種型別,原因是greater沒有定義,要想定義上述形式必須定義乙個比較的類cmp,具體實現如下**。
#include #includeview codeusing
namespace
std;
struct
node};
struct
cmp};
intmain()
getchar();
return0;
}
佇列與優先順序佇列詳解!
今天講優先佇列 簡單易懂 首先講什麼是佇列 佇列與棧往往會放到一起去講,棧是一種先進後出 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中最大關鍵字並返回該最大關鍵子...