c 實現優先順序佇列 模板

2021-09-28 22:42:32 字數 1023 閱讀 8221

首先我們來看佇列:佇列是一種先進先出的資料結構,它是按照元素的入隊時間順序來出隊的;而優先順序佇列是按照優先順序來進行處理,即不是將隊頭元素出隊,而是先將佇列中優先順序最高的元素出隊,我們一般借助堆來選出優先順序高的元素

堆是一種特殊的佇列,從堆中取出元素不是按照入隊順序,而是按照元素優先順序大小。堆是一顆完全二叉樹,分為大堆和小堆,出對元素的值是佇列中的最大值時,稱為大堆,反之為小堆;

實現主要是堆的思想,也就是向下調整和向上調整

無參構造

區間構造,先將區間元素全部拷貝到當前容器中,然後開始從最後乙個父節點進行向下調整,一直調整到隊頭元素位置

//優先順序序列

template,class com=less>

class priority_queue //無參構造,自動呼叫容器的建構函式

templatepriority_queue(iterator first, iterator last) //區間構造(迭代器實現)

:con(first,last)

}const t& top()const

void push(const t& data)

void pop()

swap(con.front(), con.back());

con.pop_back();

adjustdown(0);

}bool empty()

size_t size()

private:

void adjustdown(size_t parent)

if (com(con[parent], con[child]))

else

}} void adjustup(size_t child)

size_t parent = (child - 1) / 2;

while (child)

else

}} private:

container con;

com com;

};

c 簡單實現優先順序佇列

優先順序佇列 優先順序佇列 是不同於先進先出佇列的另一種佇列。每次從佇列中取出的是具有最高優先權的元素。include using namespace std template struct node 節點實現佇列 template class priority queue public prior...

優先順序佇列 c

優先順序佇列 typedef struct datatype typedef struct seqpqueue void initiate seqpqueue q int queuenotempty seqpqueue q else int queuedelete seqpqueue q,datat...

C 優先順序佇列

標頭檔案 include 定義 priority queue ype 就是資料型別,container 就是容器型別 container必須是用陣列實現的容器,比如vector,deque等等,預設用的是vector functional 就是比較的方式,可以自定義,預設是大頂堆 基本操作 empt...