标签:
//时间轮转最多 轮转
#include<iostream>
#include<queue>
using namespace std;
struct node
{
friend bool operator< (node n1, node n2)
{
if(n1.t1<n2.t1)
return false;
if(n1.t1==n2.t1)
{
if(n1.t2<n2.t2)
return true;
if(n1.t2>n2.t2)
return false;
}
return true;
}
int t1;//作业的到达时间
int t2;//作业的运行时间
int p;//进程的优先级
char name[10];
};
struct Process//进程结构体
{
char name[10];
int t;//运行时间
int p;//进程优先级
bool s;//进程的状态
Process *next;
};
int clock;
int sum;//当前的进程的数量
priority_queue<node> q;
void creat_work()//作业随机产生随机个数的作业
{
int x=(rand()%10);
while(x--)
{
clock=(clock+1)%1000;
node work;
work.name[0]=(rand()%128);
work.name[1]=(rand()%128);
work.name[2]=(rand()%128);
work.name[3]=(rand()%128);
work.t1=(rand()%1000);
work.t2=(rand()%1000);
work.p=(rand()%1000);
clock+=3;
clock%=1000;
q.push(work);
}
}
void creat_process(Process *&H)//尾查法产生进程 此时表明当前队首的作业在时间上能够被运行 每取出一个作业运行
{
Process *l=H;
while(l->next!=H)
l=l->next;
node work=q.top();
q.pop();
int p_n=(rand()%2);
for(int i=0;i<=p_n;i++)
{
Process *p=new(Process);
strcpy(*p->name,work.name);
*p->name[4]=‘_‘;
*p->name[5]=i+‘0‘;
*p->t=work.t2;
*p->p=work.p;
l->next=p;
}
l->next->next=H;
}
int main()
{
Process *H=NULL;//定义进程队列
H->next=NULL;
creat_work();//产生作业
clock=0;
sum=0;
creat_process(H);//产生进程;
return 0;
}
标签:
原文地址:http://www.cnblogs.com/zhangdashuai/p/4516750.html