#include <iostream>
using namespace std;
const int Size = 50;
typedef struct DataType
{
int num;
int priority; //优先级
} datatype;
class P_Queue
{
private:
datatype data[Size];
int count; //计数器
public:
P_Queue() { count = 0; }
int empty();
int full();
friend int operator<(datatype &, datatype &);
void insertPQ(datatype); //队列的插入
datatype deQueue(); //队列的删除
datatype PQueuefront();
int PQueuesize();
void print(datatype x)
{
cout << x.num << " " << x.priority << endl;
}
};
int P_Queue::empty()
{
return count == 0;
}
int P_Queue::full()
{
return count == Size;
}
int operator<(datatype &b, datatype &c)
{
return b.priority < c.priority;
}
void P_Queue::insertPQ(datatype x)
{
if (full())
{
cout << "队列已满!" << endl;
exit(1);
}
data[count] = x;
count++;
}
datatype P_Queue::deQueue()
{
if (empty())
{
cout << "队列空!" << endl;
exit(1);
}
datatype min = data[0];
int minindex = 0; //minidex作为最高优先级的下标
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 P_Queue::PQueuefront()
{
if (empty())
{
cout << "队列空!" << endl;
exit(1);
}
datatype min = data[0];
for (int i = 0; i < count; i++)
if (data[i] < min)
{
min = data[i];
}
return min;
}
int P_Queue::PQueuesize() { return count; }
void main()
{
P_Queue *p;
p = new P_Queue;
datatype x;
int t = -1;
cout << "选项: 1.插入 2.删除 3.队列头元素 4.队列大小" << endl;
while (1)
{
cout << "输入选项:";
cin >> t;
if (t == 1)
{
cout << "输入元素:";
cin >> x.num >> x.priority;
p->insertPQ(x);
}
else if (t == 2)
{
p->deQueue();
cout << "删除成功!" << endl;
}
else if (t == 3)
{
p->print(p->PQueuefront());
}
else if (t == 4)
{
cout << p->PQueuesize() << endl;
}
else
cout << "请重新输入:" << endl;
}
}