数据结构(C++)最小优先权队列实现<模板类>

来源:互联网 发布:烟台鼎鸿网络拖欠工资 编辑:程序博客网 时间:2024/05/16 06:02

1.优先级队列:

每一次都能取出队列中的具有最高优先权的元素,这种队列就是优先级队列。
2.代码实现
模板类PQueue:

#ifndef PQUEUE_H#define PQUEUE_H#include<assert.h>#include<iostream>#include<stdlib.h>using namespace std;const int DefaultSize=50;template <class T>class PQueue{public:    /** Default constructor */    PQueue(int sz=DefaultSize):maxSize(sz),num(0)    {        //创建队列空间        pqelements=new T[maxSize];        //断言,动态存储分配是否成功        assert(NULL!=pqelements);    }    /** Default destructor */    ~PQueue()    {        delete [] pqelements;    }    bool Insert(const T & x)    {        if(num==maxSize)            return false;        pqelements[num++]=x;        Adjust();    }    bool RemoveMin(T & x)    {        if(0==num)        {            return false;        }        x=pqelements[0];        for(int i=1; i<num; i++)        {            pqelements[i-1]=pqelements[i];        }        num--;        return true;    }    bool GetFront(T &x) const    {        if(0==num)        {            return false;        }        else        {            x=pqelements[0];            return true;        }    }    void MakeEmpty()    {        num=0;    }    bool IsEmpty()const    {        return num==0?true:false;    }    bool IsFull() const    {        return num==maxSize?true:false;    }    int getSize() const    {        return num;    }protected:    T * pqelements;    int num;    int maxSize;    void Adjust()    {        //将队尾元素按其优先权调整到适当的位置,保持所有元素优先权从小到大有序        T temp=pqelements[num-1];        for(int j=num-2; j>0; j--)        {            if(pqelements[j]<=temp)                break;            else                pqelements[j+1]=pqelements[j];            pqelements[j]=temp;        }    }};#endif // PQUEUE_H

main函数:

#include <iostream>#include<PQueue.h>using namespace std;int main(){    PQueue<int> *pq=new PQueue<int>(5);    for(int i=1; i<6; i++)        pq->Insert(i*5);    int value;    if(pq->GetFront(value))        cout<<"当前最小优先权队列的队首元素是:"<<value<<endl;    for(int i=0;i<5;i++)    {        pq->RemoveMin(value);        cout<<"删除了最小的元素:"<<value<<endl;    }    return 0;}

3.运行结果:
这里写图片描述

完整工程代码请点解我的GitHub

0 0
原创粉丝点击