直接上相关代码:
struct process
{
int id;
int arrive_t;//到达时间
int servre_t;//服务时间
int start_t;//服务开始时间
};
struct team
{
process *pc;
team *next;
team *pre;
};
void sortp()
{
team *p,*px;
int a[20];
int i=0;
//plink为链表头结点
for(p=plink->next->next;p;p=p->next)//按照到达时间排序(插入排序)
{
int key = p->pc->arrive_t;
team *py=p->next;
a[i]=p->pc->id;
//a[i]数组用来查看链表执行序列
//砍掉要比较的那个节点
if(!p->next)//避免最后一个节点指针出错
{
p->pre->next=NULL;
p->pre=NULL;
}
else
{
p->next->pre=p->pre;
p->pre->next=p->next;
px=p->pre;
py=p;
p->pre=NULL;
p->next=NULL;
}
for(px;px->pre;px=px->pre)//插入排序
{
if(px->pc->arrive_t<key) break;
}
p->pre=px;
px->next->pre=p;
p->next=px->next;
px->next=p;
p=py;
py=NULL;
//if(!p->next) break;
i++;
}
}
当有两个p->pc->arrive-t 相等并且相邻输入时,链表会在两者之间无限循环