<1>概念
優先順序佇列,顧名思義,就是一種根據一定優先順序儲存和取出資料的佇列。它可以說是佇列和排序的完美結合體,不僅可以儲存資料,還可以將這些資料按照我們設定的規則進行排序。優先順序佇列是堆的一種常見應用。有最大優先順序佇列(最大堆)和最小優先順序佇列(最小堆)。優先順序佇列是一種維護有一組元素構成的集合s的資料結構。
<2>優先佇列支援的基本運算
[cpp]view plain
copy
//建立乙個儲存元素為int的優先順序佇列,其實是建了乙個小頂堆
//但是請特別注意這樣的建的堆預設是大頂堆,即我們從堆頂去的元素是整個堆中元素最大的。
priority_queue
> heap;
//可以這樣建乙個表示小頂堆的優先順序佇列
priority_queue
, vector<
int>, greater<
int> > heap;
//將元素x放入優先順序佇列中
heap.push(x);
//取出優先順序佇列第乙個元素(堆頂元素),儲存在x中
intx = heap.top();
//彈出堆頂元素,取出後堆會自動調整為乙個最小堆(最大堆)
heap.pop();
//判斷是否為空
heap.empty();
//標頭檔案
#include
<3>自定義優先順序
新增元素為結構體需要過載'
[cpp]view plain
copy
#include
#include
#include
using
namespace
std;
struct
node
/*不要過載這個'>'只過載'
friend bool operator > (node node1,node node2) */
};
struct
node2
};
intmain()
printf("最大優先佇列:\n"
);
//出佇列
for(i = 0;i
//例項二 結構體2
node2 b2[5];
b2[0].value = 6; b2[0].key = 1;
b2[1].value = 9; b2[1].key = 2;
b2[2].value = 2; b2[2].key = 3;
b2[3].value = 8; b2[3].key = 4;
b2[4].value = 1; b2[4].key = 5;
//最大優先佇列
priority_queueheap2;
//入佇列
for(i = 0;i
printf("最小優先佇列:\n"
);
//出佇列
注意:
[cpp]view plain
copy
struct
node
};
這樣會報錯。因為標準庫預設使用元素型別的《操作符來確定它們之間的優先順序關係。
演算法之優先順序佇列
1 概念 優先順序佇列,顧名思義,就是一種根據一定優先順序儲存和取出資料的佇列。它可以說是佇列和排序的完美結合體,不僅可以儲存資料,還可以將這些資料按照我們設定的規則進行排序。優先順序佇列是堆的一種常見應用。有最大優先順序佇列 最大堆 和最小優先順序佇列 最小堆 優先順序佇列是一種維護有一組元素構成...
演算法模板之堆 優先佇列
堆的定義 堆結構是一種陣列物件,可以被視為一顆完全二叉樹。樹中的每個節點與陣列中存放該節點中值的那個元素相對應。由上圖不難看出 fa ther i i 2 le ftch ild i i 2 r ight chil d i i 2 1當然也可以用位運算來加快速度 fa ther i i 1 left...
C 寫演算法之優先佇列
優先佇列不再遵循先入先出的原則,誰的優先順序最高,誰先出隊,分為兩種情況 1.最大優先佇列,無論入隊順序如何,都是當前最大的元素優先出隊 2.最小優先佇列,無論入隊順序如何,都是當前最小的元素優先出隊 優先佇列的實現 二叉堆的特性 1.最大堆堆頂是整個堆中的最大元素 2.最小堆的堆頂是整個堆中最小的...