题目:
描述0 系统终止服务
1 K P 将客户 K 加到等待队列中,并赋优先权 P
2 为有最高优先权的人服务,并将他从等待队列中删除
3 为有最低优先权的人服务,并将他从等待队列中删除
银行的软件工程师张国文现在抽不开身,请你替他写一个程序实现这种服务策略。
2 1 20 14 1 30 3 2 1 10 99 3 2 2 0
0 20 30 10 0
c++ STL 中有双向队列(deque) 因此只要熟悉它里面的一些函数使用,值得注意的是他还可以在中间插入元素,这就使得题目变简单了。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <deque>
using namespace std;
//记录每个人的代号与等级
struct Node
{
int num;
int level;
};
int main()
{
deque<Node> q;
int n, k, p;
Node node;
while(cin >> n)
{
if(n == 0)
return 0;
if(n == 2)
{
if(q.empty())
cout << 0 << endl;
else
{
cout << q.back().num << endl;
q.pop_back();
}
}
else if(n == 3)
{
if(q.empty())
cout << 0 << endl;
else
{
cout << q.front().num << endl;
q.pop_front();
}
}
else
{
cin >> k >> p;
node.num = k;
node.level = p;
if(q.empty())
q.push_back(node);
else if(p < q.front().level)
{
q.push_front(node);
}
else if(p > q.back().level)
{
q.push_back(node);
}
else
{
deque<Node> :: iterator it; //使用迭代器遍历队列
for(it=q.begin(); it!=q.end(); it++)
{
if(p<it->level) //因为迭代器返回的是指针,所以可以用 -> 访问结构体元素
{
q.insert(it, 1, node);
break;
}
}
}
}
}
return 0;
}