模拟固定分区分配方法.docx

上传人:b****6 文档编号:3357644 上传时间:2022-11-22 格式:DOCX 页数:7 大小:15.55KB
下载 相关 举报
模拟固定分区分配方法.docx_第1页
第1页 / 共7页
模拟固定分区分配方法.docx_第2页
第2页 / 共7页
模拟固定分区分配方法.docx_第3页
第3页 / 共7页
模拟固定分区分配方法.docx_第4页
第4页 / 共7页
模拟固定分区分配方法.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

模拟固定分区分配方法.docx

《模拟固定分区分配方法.docx》由会员分享,可在线阅读,更多相关《模拟固定分区分配方法.docx(7页珍藏版)》请在冰豆网上搜索。

模拟固定分区分配方法.docx

模拟固定分区分配方法

//文件名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!

!

!

 

欢迎您的下载,资料仅供参考!

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 工作计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1