数据结构第一次实验

删除进程未完成

代码:

#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

*/

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AbsoluteClownMaster

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值