一旦机器可用,所交费用最多的用户可最先得到服务,这时就要选择最大优先队列.
打开IDE
我们基于VC++2012创建一个工程
优先队列头文件实现如下
#if !defined(AFX_SQPQUEUE_H__0E52A62B_D94A_4F11_9215_B39D8FE5BD34__INCLUDED_) #define AFX_SQPQUEUE_H__0E52A62B_D94A_4F11_9215_B39D8FE5BD34__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include<fstream.h> #define MaxSize 6 typedef struct Datatype {int taskNo; int priority; }datatype; class SqPqueue {private: datatype data[MaxSize]; int count; public: //构造函数 SqPqueue(){count=0;} //析构函数 ~SqPqueue(){} //清空队列 void ClearPq(){count=0;} // 判断队空 int PQueueEmpty(); // 判断队满 int PQueuefull(); //重载关系运算符小于< friend int operator <(datatype &,datatype &); // 队列的插入 void InsertPQ(datatype); // 队列的删除 datatype DeQueue(); // 取队列的头元素 datatype PQueuefront(); //求队列的元素个数 int PQueueSize(); }; #endif // !defined(AFX_SQPQUEUE_H__0E52A62B_D94A_4F11_9215_B39D8FE5BD34__INCLUDED_)
优先队列类文件实现如下
#include "stdafx.h" #include "SqPqueue.h" //顺序优先级队列的实现 #include "SqPQueue.h" // 判断队空 int SqPqueue::PQueueEmpty() { return count==0;} // 判断队满 int SqPqueue::PQueuefull(){ return count==MaxSize;} //重载关系运算符小于< int operator <(datatype &b,datatype &c) {return b.priority<c.priority;} //队列的插入 void SqPqueue::InsertPQ(datatype x) {if(PQueuefull()) {cerr<<"队列满.\n";exit(1);} data[count]=x; count++; } //队列的删除 datatype SqPqueue::DeQueue() {if(PQueueEmpty()) {cerr<<"队列空.\n";exit(1);} datatype min=data[0]; int minindex=0; for(int i=0;i<count;i++) if(data[i]<min) {min=data[i];minindex=i;} data[minindex]=data[count-1]; count--; return min; } // 取队列的头元素 datatype SqPqueue::PQueuefront() {if(PQueueEmpty()) {cerr<<"队列空.\n";exit(1);} datatype min=data[0]; for(int i=1;i<count;i++) if(data[i]<min) min=data[i]; return min; } //求队列的元素个数 int SqPqueue::PQueueSize() {return count;}
插入下列类的操作代码
#include "stdafx.h" #include "SqPQueue.h" void main() { cout<<"SqPQueuem.cpp运行结果:\n"; SqPqueue MyQueue; datatype task; int i,m; cout<<"输入产生随机数的种子数m:";cin>>m; srand(m); cout<<"生成顺序优先级队列MyQueue:\n"; for(i=0;i<MaxSize;i++) {task.taskNo=i+1; task.priority=rand()%10; MyQueue.InsertPQ(task);} cout<<"求顺序优先级队列MyQueue的长度:"; cout<<MyQueue.PQueueSize()<<endl; cout<<"输出顺序优先级队列MyQueue:\n"; cout<<"序号 任务号 优先级\n"; i=1; while(!MyQueue.PQueueEmpty()) {cout<<setw(2)<<i; task=MyQueue.DeQueue(); cout<<setw(6)<<task.taskNo; cout<<setw(7)<<task.priority<<endl; i++;} cin.get(); cin.get(); }
代码下载如下
http://download.csdn.net/detail/yincheng01/4785666