删除进程未完成
代码:
#include "stdio.h"
#include <stdlib.h>
#include <conio.h>
#define getpch(type) (type*)malloc(sizeof(type))
#define NULL 0
// ¶¨Òå½ø³Ì¿ØÖÆ¿éPCB
struct pcb{
// ½ø³ÌÃû×Ö
char name[10];
// ½ø³ÌÊÇ·ñÔËÐÐ
char state;
// ½ø³ÌÓÅÏȼ¶Êý
int super;
int ntime;
int rtime;
// ÏÂÒ»¸ö½ø³Ì
struct pcb* link;
}*ready=NULL,*p,*res;
typedef struct pcb PCB;
// ½¨Á¢¶Ô½ø³Ì½øÐÐÓÅÏȼ¶ÅÅÁк¯Êý
//void sort(){
// int l=0;
// PCB* pr=ready;
// while(pr!=NULL){
// l++;
// pr=pr->link;
// }
// pr=p;
// printf("l: %d\n",l);
//}
// ·µ»Ø¾ÍÐ÷¶ÓÁеij¤¶È
int space(){
int l=0;
PCB* pr=ready;
while(pr!=NULL){
l++;
pr=pr->link;
}
return(l);
}
// °´ÕÕÓÅÏÈÊý½øÐÐÅÅÐò ¿ÉÇÀÕ¼
//void sort(){
// int len=space();
// if(len==1){
// if(ready->super>p->super){
// p->link=ready;
// ready=p;
// }else{
// ready->link=p;
// }
// }
// else if(len>1){
// PCB* pr=ready,*qr=ready->link;
// while(qr!=NULL){
// if(qr->super>p->super){
// pr->link=p;
// p->link=qr;
// break;
// }
// pr=qr;
// qr=qr->link;
// }
// qr=p;
// }
// else{
// ready=p;
// }
//}
void sort(){
int len=space();
if(len==1){
if(ready->super>p->super){
p->link=ready;
ready=p;
}else{
ready->link=p;
}
}
else if(len>1){
PCB* pr=ready,*qr=ready->link;
while(qr!=NULL){
// printf("&&&&&&&&&&&&&&&&&&&&&&\n");
if(qr->super>p->super){
pr->link=p;
p->link=qr;
break;
}
pr=pr->link;
qr=qr->link;
}
pr->link=p;
}
else{
ready=p;
}
// È¥µôÔËÐÐÍêµÄ
// res=NULL;
// PCB *rpr=res,*pr=ready,*pp;
// while(pr!=NULL){
// if(pr->state=='w'){
printf("&&&&&&&&&&&&&&&&&&&&&&\n");
// pp=pr;
// pp->link=NULL;
// rpr=pp;
// rpr=rpr->link;
// }
// pr=pr->link;
// }
// ready=res;
PCB *pr=ready,*qr;
while(pr->state!='w')pr=pr->link;
ready=pr;
qr=ready->link;
while(qr!=NULL){
if(qr->state=='w'){
pr=qr;
pr=pr->link;
pr=NULL;
}
qr=qr->link;
}
printf("sort-len: %d\n",space());
}
// ÕâÑùºÃÏñ¸ü¼òµ¥
//void sort(){
// int len=space();
// PCB *res=NULL,*rpr=res,*pr=ready;
// if(len){
// while(pr!=NULL||p!=NULL){
// if(pr->state=='R'){
// if(pr!=NULL&&p!=NULL){
// if(pr->super>p->super){
// rpr=p;
// rpr=rpr->link;
// p=NULL;
// }else{
// rpr=pr;
// rpr=rpr->link;
// pr=pr->link;
// }
// }else if(pr!=NULL&&p==NULL){
// rpr=pr;
// rpr=rpr->link;
// pr=pr->link;
// }else{
// rpr=p;
// rpr=rpr->link;
// p=NULL;
// }
// }else{
// pr=pr->link;
// }
// }
// }
// else{
// res=p;
// }
// ready=res;
//}
// ½¨Á¢½ø³Ì¿ØÖƿ麯Êý
void input() {
int i,num;
printf("\n ÇëÊäÈë½ø³ÌÊýÁ¿?");
scanf("%d",&num);
for(i=0;i<num;i++){
printf("\n ½ø³ÌºÅNo.%d:\n",i);
p=getpch(PCB);
printf("\n ÊäÈë½ø³ÌÃû:");
scanf("%s",p->name);
printf("\n ÊäÈë½ø³ÌÓÅÏÈÊý:");
scanf("%d",&p->super);
printf("\n ÊäÈë½ø³ÌÔËÐÐʱ¼ä:");
scanf("%d",&p->ntime);
printf("\n");
p->rtime=0;p->state='w';
p->link=NULL;
sort();
}
}
// ½¨Á¢½ø³ÌÏÔʾº¯Êý,ÓÃÓÚÏÔʾµ±Ç°½ø³Ì
void disp(PCB * pr){
printf("\n qname \t state \t super \t ndtime \t runtime \n");
printf("|%s\t",pr->name);
printf("|%c\t",pr->state);
printf("|%d\t",pr->super);
printf("|%d\t",pr->ntime);
printf("|%d\t",pr->rtime);
printf("\n");
}
// ½¨Á¢½ø³Ì²é¿´º¯Êý
void check(){
PCB* pr;
//ÏÔʾµ±Ç°ÔËÐнø³Ì
printf("\n **** µ±Ç°ÕýÔÚÔËÐеĽø³ÌÊÇ:%s",p->name);
disp(p);
pr=ready;
//ÏÔʾ¾ÍÐ÷¶ÓÁÐ״̬
printf("\n ****µ±Ç°¾ÍÐ÷¶ÓÁÐ״̬Ϊ:\n");
while(pr!=NULL){
disp(pr);
pr=pr->link;
}
}
// ½¨Á¢½ø³Ì³·Ïûº¯Êý(½ø³ÌÔËÐнáÊø,³·Ïû½ø³Ì)
void destroy(){
printf("\n ½ø³Ì [%s] ÒÑÍê³É.\n",p->name);
free(p);
}
// ½¨Á¢½ø³Ì¾ÍÐ÷º¯Êý(½ø³ÌÔËÐÐʱ¼äµ½,ÖþÍÐ÷״̬
void running(){
(p->rtime)++;
// µ÷ÓÃdestroyº¯Êý
if(p->rtime==p->ntime)destroy();
else{
(p->super)--;
p->state='w';
// µ÷ÓÃsortº¯Êý
sort();
}
}
int main(){
int len,h=0;
char ch;
input();
len=space();
// printf("len: %d\n",len);
while((len!=0)&&(ready!=NULL)){
ch=getchar();
h++;
printf("\n The execute number:%d \n",h);
p=ready;
ready=p->link;
p->link=NULL;
p->state='R';
check();
running();
printf("\n °´ÈÎÒ»¼ü¼ÌÐø......");
ch=getchar();
}
printf("\n\n ½ø³ÌÒѾÍê³É.\n");
ch=getchar();
return 0;
}
/*
2
000
0
1
111
1
2
5
000
0
1
111
1
2
222
2
3
333
3
4
444
4
5
*/