作业调度代码 c语言.docx
- 文档编号:2140306
- 上传时间:2022-10-27
- 格式:DOCX
- 页数:9
- 大小:16.81KB
作业调度代码 c语言.docx
《作业调度代码 c语言.docx》由会员分享,可在线阅读,更多相关《作业调度代码 c语言.docx(9页珍藏版)》请在冰豆网上搜索。
作业调度代码c语言
完整的代码(C语言):
#include
#include
intFIND(int*parent,inti)
{//查找含有元素i的树根,使用压缩规则去压缩由i到根j的所有结点
intj,k,t;
j=i;
while(parent[j]>0)j=parent[j];//找根
k=i;
while(k!
=j){//压缩由i到根j的结点
t=parent[k];
parent[k]=j;
k=t;
}
returnj;
}
voidUNION(int*parent,inti,intj)
{//使用加权规则合并根为i和j的两个集合
intx;
x=parent[i]+parent[j];
if(parent[i]>parent[j]){//i的结点少
parent[i]=j;
parent[j]=x;
}
else{//j的结点少
parent[j]=i;
parent[i]=x;
}
}
intMIN(intn,intm)
{//求n和m的最小值
if(n>m)returnm;
elsereturnn;
}
intFJS(int*D,intn,intb,int*J,int*Q)
{//找J(n)的最优解,并返回最优解的个数
inti,*F,*p,j,l,m,k;
F=(int*)malloc((b+1)*sizeof(int));
p=(int*)malloc((b+1)*sizeof(int));
for(i=0;i<=b;i++){//将树置初值
F[i]=i;
p[i]=-1;
}
k=0;//初始化J
for(i=1;i<=n;i++)
{//使用贪心规则
j=FIND(p,MIN(n,D[i]));
if(F[j]!
=0)
{//选择作业i
k=k+1;
J[k]=i;
Q[F[j]]=i;
m=F[j];
l=FIND(p,F[j]-1);
UNION(p,l,j);
F[j]=F[l];
}
}
returnk;//返回最优解的个数
}
intMAXMUM(inti,intj)
{//求i和j的最大值
if(i>j)returni;
elsereturnj;
}
intMAX(int*D,inti,intj)
{//D(1:
n)是含有n个元素数组,求出D(i,j)中的最大值并返回
intmax,mid,max1,max2;
if(i==j)max=D[i];
else
if(i==j-1)
if(D[i] elsemax=D[i]; else{ mid=(i+j)/2; max1=MAX(D,i,mid); max2=MAX(D,mid+1,j); max=MAXMUM(max1,max2); } returnmax; } voidInsertionsort(int*D,intn) {//将D中的元素按非增次序分类 intj,item,i; D[0]=65525;//设置监视哨 for(j=2;j<=n;j++){ item=D[j]; i=j-1; while(item>D[i]){ D[i+1]=D[i]; i=i-1; } D[i+1]=item; } } voidmain() { int*D,*J,*Q,*p,n,b,i,k; printf("\n*******************用贪心法解决带有限期的作业排序问题************************\n"); printf("\n请输入作业的数目: \n"); scanf("%d",&n); D=(int*)malloc((n+1)*sizeof(int)); p=(int*)malloc((n+1)*sizeof(int)); printf("\n请输入每个作业的效益值(%d个): ",n); for(i=1;i<=n;i++) scanf("%d",&p[i]); Insertionsort(p,n); printf("\n按效益值非增排序后各作业为: \n"); printf("\n作业序号效益值\n"); for(i=1;i<=n;i++) printf("J%d%d\n",i,p[i]); printf("\n"); printf("\n请输入按效益值非增排序后各作业的截止时间(%d个): ",n); for(i=1;i<=n;i++) scanf("%d",&D[i]); b=MIN(n,MAX(D,1,n)); J=(int*)malloc((b+1)*sizeof(int)); Q=(int*)malloc((b+1)*sizeof(int)); for(i=1;i<=b;i++) Q[i]=-1; k=FJS(D,n,b,J,Q); printf("\n\n************************本问题的最优解*****************************\n\n"); printf("\n作业序号效益值\n"); for(i=1;i<=k;i++) printf("J%d%d\n",J[i],p[i]); printf("\n\n************************各作业的执行次序******************************\n"); printf("\n作业序号效益值\n"); for(i=1;i<=b;i++) if(Q[i]! =-1) printf("J%d%d\n",Q[i],p[i]); printf("\n\n"); } /*银行家算法,操作系统概念(OSconceptsSixEdition) 作者: ctu_85 */ #include"malloc.h" #include"stdio.h" #definealloclensizeof(structallocation) #definemaxlensizeof(structmax) #defineavalensizeof(structavailable) #defineneedlensizeof(structneed) #definefinilensizeof(structfinish) #definepathlensizeof(structpath) structallocation { intvalue; structallocation*next; }; structmax { intvalue; structmax*next; }; structavailable { intvalue; structavailable*next; }; structneed { intvalue; structneed*next; }; structpath { intvalue; structpath*next; }; structfinish { intstat; structfinish*next; }; intmain() { introw,colum,status=0,i,j,t,temp,processtest; structallocation*allochead,*alloc1,*alloc2,*alloctemp; structmax*maxhead,*maxium1,*maxium2,*maxtemp; structavailable*avahead,*available1,*available2,*availabletemp,*workhead,*work1,*work2,*worktemp,*worktemp1; structneed*needhead,*need1,*need2,*needtemp; structfinish*finihead,*finish1,*finish2,*finishtemp; structpath*pathhead,*path1,*path2,*pathtemp; charc; printf("\nPleaseenterthetypeofsourcesthesystemhas: \n"); scanf("%d",&colum); printf("Pleaseenterthenumberofprocessesnowinthememory: \n"); scanf("%d",&row); printf("Pleaseentertheallocationarray: \n"); for(i=0;i { printf("Theallocationforprocessp%d: \n",i); for(j=0;j { printf("Thetype%csystemresourceallocated: \n",'A'+j); if(status==0) { allochead=alloc1=alloc2=(structallocation*)malloc(alloclen); alloc1->next=alloc2->next=NULL; scanf("%d",&allochead->value); status++; } else { alloc2=(structallocation*)malloc(alloclen); scanf("%d,%d",&alloc2->value); if(status==1) { allochead->next=alloc2; status++; } alloc1->next=alloc2; alloc1=alloc2; } } } alloc2->next=NULL; status=0; printf("Pleaseenterthemaxarray: \n"); for(i=0;i { printf("Themaxneededfromprocessp%d: \n",i); for(j=0;j { printf("Thetype%cmaxiumsystemresourcemayneeded: \n",'A'+j); if(status==0) { maxhead=maxium1=maxium2=(structmax*)m
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 作业调度代码 c语言 作业 调度 代码 语言