VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1272|回复: 5

帮忙编写一个操作系统中进程调度的短作业优先算发的程序,感谢!

[复制链接]

1

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-3 10:00:02 | 显示全部楼层 |阅读模式
帮忙编写一个操作系统中进程调度的短作业优先算发的程序,感谢!
回复

使用道具 举报

1

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-1-3 11:36:01 | 显示全部楼层
有没人能帮到我?
回复

使用道具 举报

0

主题

36

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-1-3 16:06:01 | 显示全部楼层
任何一本以C语言来讲操作系统的书上都有关于你想要的程序代码,作业题目,鉴定完毕
回复

使用道具 举报

0

主题

19

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
发表于 2020-1-3 21:33:01 | 显示全部楼层
完整的代码(C语言):   
  #include<stdio.h>   
  #include<malloc.h>   
   
  int   FIND(int   *parent,int   i)   
  {//查找含有元素i的树根,使用压缩规则去压缩由i到根j的所有结点   
  int   j,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;   
  }   
  return   j;   
  }   
   
  void   UNION(int   *parent,int   i,int   j)   
  {//使用加权规则合并根为i和j的两个集合   
  int   x;   
  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;   
  }   
  }   
   
  int   MIN(int   n,int   m)                                                      
  {//求n和m的最小值   
  if(n>m)   return   m;   
  else         return   n;   
  }   
   
  int   FJS(int   *D,int   n,int   b,int   *J,int   *Q)   
  {//找J(n)的最优解,并返回最优解的个数   
  int   i,*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];   
  }   
  }   
  return   k;//返回最优解的个数   
  }   
   
   
  int   MAXMUM(int   i,int   j)   
  {//求i和j的最大值   
  if(i>j)   return   i;   
  else     return     j;   
  }   
   
  int   MAX(int   *D,int   i,   int   j)   
  {//D(1:n)是含有n个元素数组,求出D(i,j)中的最大值并返回   
  int   max,mid,max1,max2;   
  if(i==j)     max=D[i];   
          else   
  if(i==j-1)      
  if(D[i]<D[j])     max=D[j];   
  else   max=D[i];   
  else{   
  mid=(i+j)/2;   
  max1=MAX(D,i,mid);   
  max2=MAX(D,mid+1,j);   
  max=MAXMUM(max1,max2);   
  }   
  return   max;   
  }   
   
  void   Insertionsort(int   *D,int   n)   
  {//将D中的元素按非增次序分类   
  int   j,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;   
   
  }   
   
  }   
   
  void   main()   
  {   
  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");   
   
  }   


回复

使用道具 举报

1

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-1-4 17:39:01 | 显示全部楼层
感谢!!!但程序中有些地方不是很明白,需要再想想。
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-9-4 12:00:01 | 显示全部楼层
向高手学习了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表