優先對列與普通佇列不同的是,它能夠賦予元素優先順序,可以取出最大的數,而普通佇列是先進先出,優先佇列同時也可以插入資料。
優先佇列的實現用到二叉堆的資料結構。
在堆中兒子節點的值不能小於父親節點的值。排列順序也是從左到右,從上到下。
在堆中插入數值時,先將數值插入堆的末尾,然後根據規則,找到乙個沒有大小顛倒的位置。
取出堆中的資料時,先取出根節點的資料,然後用末尾的節點替換根節點,並刪除末尾節點,然後與兩個兒子節點比較,若兩個都小於根節點,選擇最小的那個與根節點交換,直到堆中節點都符合規則。
堆操作的時間複雜度
堆(優先佇列)的基本操作也是push和pop,由於二叉樹的關係,時間複雜度也是o(log n)。
堆的實現
左孩子節點編號=父親節點編號*2+1
右孩子節點編號=父親節點編號*2+2
//x為要插入的數值,sn為當前末尾節點編號
void push(int x)
heap[i]=x;
}
int pop()
heap[i]=x;
return min;
}
在c++ stl中已經包含了優先佇列priority_queue
要先宣告#include
佇列 優先佇列的學習
佇列定義 佇列是限定只能在表尾進行 插入,在表頭進行刪除的線性表 隊尾 允許插入的一端 隊頭 允許刪除的一端 佇列的定義 include queue 標頭檔案 using namespace std 需要加上使用名稱 空間,和sort 排序函式是一樣的。queue int q 格式 queue 型別...
優先佇列學習
一 相關定義 優先佇列容器與佇列一樣,只能從隊尾插入元素,從隊首刪除元素。但是它有乙個特性,就是佇列中最大的元素總是位於隊首,所以出隊時,並非按照先進先出的原則進行,而是將當前佇列中最大的元素出隊。這點類似於給佇列裡的元素進行了由大到小的順序排序。元素的比較規則預設按元素值由大到小排序,可以過載 操...
C 佇列學習筆記 RabbitMQ優先順序佇列
在具體業務中可能會遇到一些要提前處理的訊息,比如普通客戶的訊息按先進先出的順序處理,vip客戶的訊息要提前處理。在rabbitmq中,訊息優先順序的實現方式是 在宣告queue時設定佇列的x max priority屬性,然後在publish訊息時,設定訊息的優先順序即可。rabbitmq優先順序佇...