//不知道你这些代码那儿弄来的
//使用全局变量,这不是个好主意!
//功能:将制定进程按到达时间非递减的顺序插入到链表中合适的位置
void insert(process *current)//插入输入的进程
{//插入前,链表已按到达时间非递减有序
if(head!=NULL)//若链表非空
{
//如果只有一个结点
if(head->next==NULL)
{
//如果比链头到达时间还要早,即表示它是最早到达的,则插入到链头
if(current->arriveTime
{
current->next=head;
head=current;
}
//如果比链头到达时间晚,插入表头之后
else
{
current->next=NULL;
head->next=current;
}
}
//如果至少有2个结点
else
{
process *p1=head;
//同前,如果比链头到达时间还要早,即表示它是最早到达的,则插入到链头
if(head->arriveTime>current->arriveTime)
{
current->next=head;
head=current;
}
//如果比链头到达时间晚,这里把逻辑整得相当复杂,因此我重新写了这个函数附上
else
{
int flag=1;
//在头结点和最后一个结点之间搜索插入点并插入
while(p1->next!=NULL)
{
//如果在两个结点之间,则插入
if(p1->arriveTime
{
current->next=p1->next;
p1->next=current;
flag=0;
break;
}
else p1=p1->next;
}
//如果在头结点和最后一个结点之间搜索插入点失败
//表明,此结点到达时间最大,则加入到最后
//这里存在语法错误flag==1
if(flag=1)
{
p1->next=current;
current->next=NULL;
}
}
}
}
//若链表为空,直接加入链表
else head=current;
}
//创建先到先服务的进程链表?
void createFCFS()
{
process *q1=new process;//process *q1;声明就足够了
cout<<"请输入进程总数目:";
cin>>count;
cout<
while(number<=count)
{
q1=new process;
//设置进程各个属性
q1->no=number;
cout<<"进程序号:"<
cin>>q1->name;
cout<<"进程到达时间:";
cin>>q1->arriveTime;
cout<<"进程所需时间:";
cin>>q1->needTime;
q1->next=NULL;
//插入进程
insert(q1);
number++;
cout<
}
void printFCFS()//打印先到先服务的进程信息
{
process *p=new process;
double sysTime=0;
double turn=0;
if(head==NULL) cout<<"没有进程调度!"<
else if(head!=NULL)
{//如果链表不空,则按照单道批处理的方式,计算各进程启动和终止时间
//初始化,到达最早的进程,一旦到达即可启动
head->startTime=head->arriveTime;
head->endTime=head->arriveTime+head->needTime;
sysTime=head->endTime;
turn=turn+(head->endTime-head->arriveTime);//周转时间
p=head->next;
while(p!=NULL)
{
//若当前进程到达时,前一进程已经终止,则可以立即启动
if(p->arriveTime>sysTime)
{
p->startTime=p->arriveTime;
p->endTime=p->startTime+p->needTime;
sysTime=p->endTime;
turn=turn+(p->endTime-p->arriveTime);
p=p->next;
}
//若当前进程到达时,前一进程尚未终止,则推迟启动直到前一进程终止
else
{
p->startTime=sysTime;
p->endTime=p->startTime+p->needTime;
sysTime=p->endTime;
turn=turn+(p->endTime-p->arriveTime);
p=p->next;
}
}
}
cout.setf(ios::left);
//打印列头
cout<
//打印先到先服务的进程信息,每个节点一行
while(temp!=NULL)
{
cout.setf(ios::left);
cout<
}
cout<<"平均周转时间:"<
// process *t;
// while(head){
// t=head;
// head=head->next;
// delete t;
// }
while(head->next!=NULL)
{
process *t=new process;
t=head->next;
head->next=t->next;
delete t;
}
head=NULL;
//代码不完整
//=================附上修改的insert函数=========================
//功能:将制定进程按到达时间非递减的顺序插入到链表中合适的位置
void insert(process *head,process *current)
{
//插入前,链表已按到达时间非递减有序,这是前提
if(head){
//如果比链表头节点到达时间还要早,即表示它是最早到达的,则插入到链头
if(current->arriveTime < head->arriveTime)
{
current->next=head;
head=current;
}
//如果比链表头节点到达时间晚,一体化处理
else
{
process *p1,*p2;
//搜索最后一个不晚于和第一个晚于该进程到达的进程
for(p1=head,p2=p1->next;p2 && (p2->arriveTime < current->arriveTime);p1=p2,p2=p2->next);
//插入其间
current->next = p2;
p1->next = current;
}
}
//若链表为空,直接加入链表
else head=current;
}
不明白