優先順序佇列:
優先順序佇列 是不同於先進先出佇列的另一種佇列。每次從佇列中取出的是具有最高優先權的元素。
#include
using namespace std;
template
struct node
}; //節點實現佇列
template
class priority_queue
public:
priority_queue() //初始化佇列,初始化乙個節點,但不用來存值
front=rear=newnode;
front->date=t();
rear->next=null;
front->index=0;
count=0;
booladd(const t &e ,int index); //新增元素
booldel(t & e); //出隊
int size();
boolempty();
boolclear();
voiddisplay();
~priority_queue()
this->clear();
private:
node* front; //頭指標
node* rear; //尾指標
intcount; //元素的個數
入隊constt &e :為要入隊的元素值
intindex: 為優先順序數值,先給乙個優先順序數值來決定在佇列中的位置
入隊時判斷元素的優先順序並確定元素在佇列中的位置
template
bool priority_queue::add(const t&e ,int index)
node* p=new node;
p->date=e;
p->index=index;
if(index>front->index)
p->next=front;
front=p;
count++;
returntrue;
else
if(front->next==rear)
front->next=p;
p->next=rear;
else
node*q=front;
while(index<=q->next->index)
q=q->next;
p->next=q->next;
q->next=p;
count++;
returntrue;
出隊t &e:出隊的元素
出隊時不用判斷元素的優先順序,直接從front出隊,因為入隊時已按優先順序入隊
template
bool priority_queue::del(t & e)
if(front==rear)
cout<<"隊列為空!,del失敗!"date;
node* p=front;
front=p->next;
deletep;
count--;
returntrue;
template
int priority_queue::size()
returncount;
template
bool priority_queue::empty()
if(front==rear)
returntrue;
else
returnfalse;
template
bool priority_queue::clear()
node*p=front;
node*q=null;
while(p)
q=p;
deleteq;
p=p->next;
returntrue;
template
void priority_queue::display()
if(empty())
cout<<"隊列為空,display失敗!"else
node* p=front;
cout<<"優先順序:"while(p->next)
q=p;
p=p->next;
coutcoutpriority_queueq;
q.add(10,4);
q.add(8,6);
q.add(7,5);
q.display();
inte;
q.del(e);
cout<<"出隊:"cout<<"佇列長度:"return0;
優先順序佇列的簡單實現
自動調整 namespace my template class inputiterator priority queue inputiterator first,inputiterator last c first,last public bool empty size t size public...
c 實現優先順序佇列 模板
首先我們來看佇列 佇列是一種先進先出的資料結構,它是按照元素的入隊時間順序來出隊的 而優先順序佇列是按照優先順序來進行處理,即不是將隊頭元素出隊,而是先將佇列中優先順序最高的元素出隊,我們一般借助堆來選出優先順序高的元素 堆是一種特殊的佇列,從堆中取出元素不是按照入隊順序,而是按照元素優先順序大小。...
優先順序佇列 c
優先順序佇列 typedef struct datatype typedef struct seqpqueue void initiate seqpqueue q int queuenotempty seqpqueue q else int queuedelete seqpqueue q,datat...