赞
踩
删除进程未完成
代码:
- #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
- */
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。