这篇我们用STL里面的 queue 库来写上一篇的时间片轮转调度算法。
queue 库里面主要有:
①TYPE &back();
back()返回一个引用,指向队列的最后一个元素。
②bool empty();
empty()函数返回真(true)如果队列为空,否则返回假(false)。
③TYPE &front();
front()返回队列第一个元素的引用。(即取队头)
④void pop();
pop()函数删除队列的一个元素。(即队头元素出队列)
⑤void push( const TYPE &val );
push()函数往队列中加入一个元素。(即进队列)
⑥size_type size();
size()返回队列中元素的个数。
利用这六个函数,我们就很容易地写出上一篇的算法了。
AC代码:
#include<iostream>
#include<queue>
using namespace std;
struct Point//任务结点
{
string name;
int time;
Point(string name,int time)
{
this->name=name;
this->time=time;
}
};
queue<Point> Que;//队列
int main()
{
//输入
int N,T;
cin>>N>>T;
string name;
int time;
while(N--)
{
cin>>name>>time;
Que.push(Point(name,time));
}
//计算与输出
int c,sum=0;
while(!Que.empty())
{
Point temp=Que.front();
Que.pop();
c=min(T,temp.time);
temp.time-=c;
sum+=c;
if(temp.time>0)
{
Que.push(temp);
}
else
{
cout<<temp.name<<" "<<sum<<endl;
}
}
return 0;
}
运行结果:
Over.