演算法之優先順序佇列

2021-06-13 02:56:59 字數 1574 閱讀 9542

<1>概念

優先順序佇列,顧名思義,就是一種根據一定優先順序儲存和取出資料的佇列。它可以說是佇列和排序的完美結合體,不僅可以儲存資料,還可以將這些資料按照我們設定的規則進行排序。優先順序佇列是堆的一種常見應用。有最大優先順序佇列(最大堆)和最小優先順序佇列(最小堆)。優先順序佇列是一種維護有一組元素構成的集合s的資料結構。

<2>優先佇列支援的基本運算

//建立乙個儲存元素為int的優先順序佇列,其實是建了乙個小頂堆

//但是請特別注意這樣的建的堆預設是大頂堆,即我們從堆頂去的元素是整個堆中元素最大的。

priority_queueheap;

//可以這樣建乙個表示小頂堆的優先順序佇列

priority_queue, greater> heap;

//將元素x放入優先順序佇列中

heap.push(x);

//取出優先順序佇列第乙個元素(堆頂元素),儲存在x中

int x = heap.top();

//彈出堆頂元素,取出後堆會自動調整為乙個最小堆(最大堆)

heap.pop();

//判斷是否為空

heap.empty();

//標頭檔案

#include

<3>自定義優先順序

新增元素為結構體需要過載'

#include#include#includeusing namespace std;

struct node

/* 不要過載這個'>'只過載'

friend bool operator > (node node1,node node2)

*/};

struct node2

};int main()

printf("最大優先佇列:\n");

//出佇列

for(i = 0;i < 5;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 < 5;i++)

printf("最小優先佇列:\n");

//出佇列

注意:

struct node  

};

這樣會報錯。因為標準庫預設使用元素型別的《操作符來確定它們之間的優先順序關係。

看病要排隊

搬水果

佇列 優先順序佇列

優先順序佇列的隊尾是不需要改變的,永遠在低下標處。當佇列增加資料時,隊頭的位置就是資料項的大小減去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中最大關鍵字並返回該最大關鍵子...

優先順序佇列

1 include stdafx.h 2 include3 4 using namespace std 5 6 define max heap len 107 int heap max heap len 8 int heap size 0 the number of elements in heap...