優先佇列的學習筆記

2021-06-28 05:23:24 字數 728 閱讀 5070

優先對列與普通佇列不同的是,它能夠賦予元素優先順序,可以取出最大的數,而普通佇列是先進先出,優先佇列同時也可以插入資料。

優先佇列的實現用到二叉堆的資料結構。

在堆中兒子節點的值不能小於父親節點的值。排列順序也是從左到右,從上到下。

在堆中插入數值時,先將數值插入堆的末尾,然後根據規則,找到乙個沒有大小顛倒的位置。

取出堆中的資料時,先取出根節點的資料,然後用末尾的節點替換根節點,並刪除末尾節點,然後與兩個兒子節點比較,若兩個都小於根節點,選擇最小的那個與根節點交換,直到堆中節點都符合規則。

堆操作的時間複雜度

堆(優先佇列)的基本操作也是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優先順序佇...