加粗的代码是我自己加上的,但是调用就不太会了,结构体数组怎么调用?还有用结构体数组做的这个分配算法怎么回收分区?请会的给讲一讲,这是老师留的一个作业,我想了两节课了不会。。#include<stdio.h>#define N 100typedef struct { int Free[N]; //空闲分区大小 int add[N]; //空闲分区起始地址 char PName[N]; //作业名称 int PNeed[N]; //作业需求空间大小 int state[N]; //作业分配标志 int PFNum,PrNum; //空闲分区个数,作业个数}Process;Process p;int i,j,k,d,t;char order[N][N];char ch[N];int m; //作业个数int n; //空闲分区个数void sort(struct p add[],int n) //首次适应算法,按地址空间由低到高排序{ for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(p.add[j]>p.add[j+1]) { t=p.add[j]; p.add[j]=p.add[j+1]; p.add[j+1]=t; } } }}int Pinput() //参数输入{ printf("请输入空闲分区个数:\n"); scanf("%d",&n); printf("请依次输入空闲分区大小(KB):\n"); for(i=0;i<n;i++) { scanf("%d",&p.Free[i]); } printf("请依次输入空闲分区的起始地址(KB):\n"); for(i=0;i<n;i++) { scanf("%d",&p.add[i]); } sort(p,n); //调用排序函数 printf("请输入作业个数:\n"); scanf("%d",&m); printf("请依次输入作业名称:\n"); for(i=0;i<m;i++) { scanf("%c%c",&ch[i],&p.PName[i]); } printf("请依次输入作业大小(KB):\n"); for(i=0;i<m;i++) { scanf("%d",&p.PNeed[i]); p.state[i]=0; } printf("分区信息如下:\n"); for(i=0;i<n;i++) { printf("| %d号分区\t",j+1); printf("| %3dKB \n",p.Free[j]); } printf("\n"); printf("作业信息如下:\n"); for(i=0;i<m;i++) { printf("作业名%3c \t",p.PName[i]); } printf("\n"); for(i=0;i<m;i++) { printf("大小 %3dkb\t",p.PNeed[i]); } printf("\n"); return 0;}int First() //首次适应算法{ for(i=0;i<m;i++) { for(j=0;j<n;j++) { //找到第一个合适的空闲分区 if((p.PNeed[i] <= p.Free[j]) && (!p.state[i])) { for(k=0;k<3;k++) //记录作业分配 { if(order[j][k]==NULL) { order[j][k]=p.PName[i]; break; } else continue; } p.Free[j]=p.Free[j]-p.PNeed[i]; p.state[i]=1; } } } return 0;}int Poutput() //结果输出{ for(i=0;i<n;i++) { printf("| %d号分区\t",i+1); printf("|"); for(j=0;j<3;j++) { if(order[i][j]==' ') printf(" "); else printf("%2c",order[i][j]); } printf("\n"); } printf("\n"); return 0;}void main() //主函数{ Pinput(); printf("分配结果:\n"); First(); Poutput();}
目前暂无任何回答
- 0 回答
- 0 关注
- 1377 浏览
添加回答
举报
0/150
提交
取消