模拟固定分区分配方法.docx
《模拟固定分区分配方法.docx》由会员分享,可在线阅读,更多相关《模拟固定分区分配方法.docx(7页珍藏版)》请在冰豆网上搜索。
模拟固定分区分配方法
//文件名gdf.c//
#include"stdio.h"
structgdf//固定分区结构体//
{
charnum[2];//区号//
charsize[4];//大小//
charbegin[4];//起址//
charflag[2];
structgdf*next;//后指针//
structgdf*prior;//前指针//
}stu;
structgdf*fir;//分区链表的头指针//
structgdf*back;//分区链表的尾指针//
voidenter(),turn(),prin();
charstr[16][4]={"1","16","20","1","2","32","36","1","3","64","68","1","4","124","132","0"};
menu();
voidenter();
inputs();
voidturn();
voidprin();
main()
{
fir=back=NULL;//对分区链表的头指针赋初值//
enter();//对分区链表赋初值//
for(;;)
{
switch(menu())
{
case1:
inputs();//输入作业大小并处理//
break;
case2:
turn();//改变分配状态//
break;
//case3:
turnall();//改变所有分配状态//
//break;
case4:
prin();
break;//显示//
case5:
exit(0);//退出//
}
}
}
menu()//主菜单//
{
charch[2];
intn;
printf("\n\t固定分区操作,请选择功能:
\n");
printf("\t1.输入作业的大小\n");
printf("\t2.改变分区的分配状态\n");
//printf("\t3.改变所有分区的分配状态\n");
printf("\t4.显示分区链表内容\n");
printf("\t5.退出\n");
do
{
printf("\t请按数字选择:
");
gets(ch);
n=atoi(ch);
}while(n<0||n>4);
return(n);
}
voidenter()
{
intqq;
structgdf*inf,*bc();
for(qq=0;qq<4;qq++)//节点初始化//
{
inf=(structgdf*)malloc(sizeof(stu));//开辟新节点空间//
if(!
inf)
{
printf("\tuseup!
\n");
return;
}
strcpy(inf->num,str[qq*4]);
strcpy(inf->size,str[qq*4+1]);
strcpy(inf->begin,str[qq*4+2]);
strcpy(inf->flag,str[qq*4+3]);
fir=bc(inf,fir);
}
}
inputs()//输入作业大小并处理//
{
charq[5];
structgdf*inf;
inf=fir;
while(inf)//寻找空闲分区//
{
if(atoi(inf->flag)==0)
break;
inf=inf->next;
}
if(!
inf)//不存在空闲分区,返回//
{
printf("\t暂时没有空闲分区.\n");
return;
}
printf("\t输入作业大小(K):
");//打印提示信息//
gets(q);
inf=fir;
while(inf)//寻找符合条件的空闲分区,找到则返回//
{
if((atoi(q)size))&&atoi(inf->flag)==0)
{
strcpy(inf->flag,"1");
printf("\t作业已分配在%s区.\n",inf->num);
return;
}
inf=inf->next;
}
printf("\t空闲分区不够大,请选择另一个较小的作业.\n");
}
voidturn()//改变分配状态//
{
charq[5],q1[5];
structgdf*inf;
printf("\t输入分区(1-4):
");//打印提示信息//
gets(q);
printf("\t输入分配状态(0-1):
");
gets(q1);
inf=fir;
while(inf)
{
if(atoi(inf->num)==atoi(q))//寻找符合条件分区//
{
strcpy(inf->flag,q1);//改变分区状态//
printf("\t%s分区已成功改变分区状态.\n",inf->num);
return;
}
inf=inf->next;
}
printf("\t该分区不存在.\n");
return;
}
//voidturnall()//改变所有分配状态//
//{
//charq[5],q1[5];
//printf("\t是否确定改变所有分区状态Y\N");
//gets(q);
//if(q==Y)
//{
//printf("\t输入分配状态(0-1):
");
//gets(q1);
//inf=fir;
//for(inf->num=1;inf->num<=4;inf->num++);
//{
//strcpy(inf->flag,q1);
//}
//}
//else
//return;
//}
//
voidprin()//显示//
{
structgdf*j;
j=fir;
printf("\t区号");
printf("\t大小");
printf("\t起址");
printf("\t标志\n");
while(j)//显示固定分区的信息//
{
printf("\t%s",j->num);
printf("\t%s",j->size);
printf("\t%s",j->begin);
printf("\t%s",j->flag);
printf("\n");
j=j->next;
}
structgdf*bc(i,st)
structgdf*i;
structgdf*st;
{
structgdf*k;
if(back==NULL){
i->next=NULL;
i->prior=NULL;
back=i;
return(i);
}
k=back;
k->next=i;
i->next=NULL;
i->prior=k;
back=i;
return(st);
}
WelcomeTo
Download!
!
!
欢迎您的下载,资料仅供参考!