加粗的代码是我自己加上的,但是调用就不太会了,结构体数组怎么调用?
还有用结构体数组做的这个分配算法怎么回收分区?请会的给讲一讲,这是老师留的一个作业,我想了两节课了不会。。
#include<stdio.h>
#define N 100
typedef 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();
}
相关分类