最佳适应算法
#include #include typedef struct{int num; //区号int size; //大小int start_address; //起始地址int flag; //占用标识}free_area,*free_point;typedef struct{free_point m[10];int n;}Memory;typedef struct{char name[10];int size;int flag;}Work,*Work_point;typedef struct{Work_point w[10];int n;}Job;void setID(Memory *Q,Job *J){freopen("INPUT.txt","r",stdin);int i;for(i=0;im[i]=(free_point)malloc(sizeof(free_area));scanf("%d%d%d",&(Q->m[i]->num),&(Q->m[i]->size),&(Q->m[i]->start_address));Q->m[i]->flag=1;}for(i=0;iw[i]=(Work_point)malloc(sizeof(Work));scanf("%s%d",J->w[i]->name,&(J->w[i]->size));J->w[i]->flag=0;}}int cmp( const void *a ,const void *b){return (*(free_point *)a)->size > (*(free_point *)a)->size? 1 : -1;}void select_sort(Memory *Q){int i,j,k;free_point temp;for(i=0;im[j]->sizem[k]->size) k=j;if(k!=i){temp=Q->m[k];Q->m[k]=Q->m[i];Q->m[i]=temp;}}}void execute(Memory *Q,Job *J){int i,j;for(i=0;im[j]->flag&&Q->m[j]->size>J->w[i]->size){Q->m[j]->size-=J->w[i]->size;J->w[i]->flag=1;break;}elseif(Q->m[j]->flag&&Q->m[j]->size==J->w[i]->size){Q->m[j]->flag=0;Q->m[j]->size=0;J->w[i]->flag=1;break;}}select_sort(Q);}for(i=0;iw[i]->flag)printf("作业等待内存资源");}void print(Memory *Q){int i;for(i=0;im[i]->flag)printf("%d %d %d\n",Q->m[i]->num,Q->m[i]->size,Q->m[i]->start_address);}}int main(){Memory Q;Job J;setID(&Q,&J);//qsort(Q.m,5,sizeof(Q.m[0]),cmp);select_sort(&Q);//print(&Q);printf("\n");execute(&Q,&J);print(&Q);return 0;}