優先順序佇列的實現

2021-09-26 22:30:10 字數 717 閱讀 5604

首先優先順序佇列的概念脫胎於佇列,佇列有先進先出的概念,優先順序佇列則根據優先順序的次序從佇列中彈出元素。

優先佇列的底層實現是堆,因為堆的插入時間複雜度為o(logn),所以優先順序佇列的入隊操作的時間複雜度也是o(logn)。堆可以由動態陣列實現的。

優先順序佇列中比較重要的兩個操作是插入刪除

如下簡寫了乙個優先順序佇列的類:

class priority_queue;
插入操作,即插入到動態陣列的末端,如果超過了陣列的容量,那麼就需要將陣列的容量擴大一倍。如果對於堆的資料結構足夠了解,插入操作即將要插入的元素放在隊尾,然後按照優先順序的比較順序進行「上公升」操作。在sgi stl的實現中,優先順序佇列被稱之為容器配適器。根據sgi中對於優先順序佇列的定義:

template , 

class compare = less>

我們發現只需要在宣告的時候,填入模板中的型別、容器和比較函式,其中比較函式如果是less代表是最大堆,如果是greater代表是最小堆。當然還可以自己定義比較函式,比如如下的**中就定義了最小堆:

struct node

};struct cmp

}; priority_queue, cmp> q;

和堆的刪除操作一樣。不贅述。

優先順序佇列的實現

優先順序佇列 佇列裡面的所有元素都有相應的權值,元素的刪除順序由這些權值決定。優先順序佇列的實現一般用堆來實現其效率比一般的實現要高。要弄清楚堆我們得先弄清楚下面的定義 一顆大根樹 小根樹 是這樣一棵樹,其中每個節點的值都大於 小於 或等於其子節點 如果有子節點的話 的值。大根堆 乙個大根堆 小根堆...

優先順序佇列(堆實現)

一 優先順序佇列定義 二 方法實現 獲得最大元素方法 去掉最大元素方法 修改優先順序方法 新增節點 三 實現 用堆實現乙個優先順序佇列 主要是新增 修改 刪除節點 節點具有唯一性 author hhf 2014年11月28日 public class priorityqueue 返回優先佇列中優先順...

Redis實現優先順序佇列

title redis實現優先順序佇列 tags 基於目前系統中存在部分非同步需求,比如匯入或者新開客戶車輛匹配vin碼等 redis中使用列表作為佇列 最關鍵提供了阻塞版本的指令blpop 新建三個佇列對應高中低優先順序 比如f6car high f6car mid f6 car low 再新建d...