删除进程未完成
代码:
#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
25
000
0
1
111
1
2
222
2
3
333
3
4
444
4
5*/