演算法之優先佇列

2021-07-09 03:20:29 字數 1824 閱讀 6321

<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.最小堆的堆頂是整個堆中最小的...