首次适应算法最佳适应算法最坏适应算法源代码宝典文档格式.docx
《首次适应算法最佳适应算法最坏适应算法源代码宝典文档格式.docx》由会员分享,可在线阅读,更多相关《首次适应算法最佳适应算法最坏适应算法源代码宝典文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
DuLNode,*DuLinkList;
DuLinkListblock_first;
//头结点DuLinkListblock_last;
//尾结点
Statusalloc(int);
//内存分配Statusfree(int);
//内存回收
StatusFirst_fit(int);
//首次适应算法
StatusBest_fit(int);
//最佳适应算法StatusWorst_fit(int);
//最差适应算法
voidshow();
//查看分配
StatusInitblockO;
//开创空间表
StatusInitblock()//开创带头结点的内存空间链表
block_first=(DuLinkList)malloc(sizeof(DuLNode));
block_last=(DuLinkList)malloc(sizeof(DuLNode));
block_first~>
prior=NULL;
blockfirst-〉next二blocklast;
block_last->
prior=block_first;
block_last->
next=NULL;
data・address=0;
data・size二MAX_length;
block_last~>
data・state=Free;
returnOK;
}
〃分配主存
Statusalloc(intch)
intrequest=0;
cout«
,z请输入需要分配的主存大小(单位:
KB):
〃;
cin»
request;
if(request<
0request==0)
z,分配大小不合适,请重试〜,z«
endl;
returnERROR;
if(ch-2)〃选择最佳适应算法
if(Best_fit(request)~0K)cout«
,/分配成功〜,z«
elsecout«
,?
内存不足,分配失败〜"
«
if(ch-3)//选择最差适应算法
if(Worst_fit(request)~0K)cout«
z,分配成功〜,,«
elsecout«
,/内存不足,分配失败〜,,«
else〃默认首次适应算法
if(First_fit(request)—OK)cout«
,z分配成功〜,,«
StatusFirst_fit(intrequest)
〃为申请作业开辟新空间且初始化
DuLinkListtemp=(DuLinkList)malloc(sizeof(DuLNode));
temp-〉data・size二request;
temp-〉data・state二Busy;
DuLNode*p=block_first->
next:
while(p)
if(p->
data・state二二Free&
&
p->
data・size二二request)
{//有大小恰好合适的空闲块
p->
data.state二Busy;
break;
data・size>
request)
{〃有空闲块能满足需求且有剩余
temp->
prior=p->
prior;
next=p;
data・address=p->
data・address;
prior->
next=temp;
prior=temp;
data.address=temp->
data・address+temp->
data・size;
data.size-二request;
p=p->
next;
returnERROR:
//最佳适应算法
StatusBest_fit(intrequest)
intch;
〃记录最小剩余空间
data・size二request;
data・state=Busy;
DuLNode*q=NULL;
〃记录最佳插入位置while(p)//初始化最小空间和最佳位置
(p->
data・size〉二request))
辻(q二二NULL)
q二P;
ch=p->
data・size-request;
elseif(q->
data.size>
data.size)
//最差适应算法
StatusWorst_fit(intrequest)
//记录最大剩余空间
temp-〉data・state=Busy;
LNode*p=block_first->
Du
//记录最佳插入位置
while(p)//初始化最大空间和最佳位置
data.size<
辻(q二二NULL)returnERROR;
//没有找到空闲块
elseif(q->
data・size=request)
q->
data・state二Busy;
else
temp->
prior=q->
next=q;
data・address=q->
next=temp;
data・address+二request;
data・size=ch;
〃主存回收
Statusfree(intflag)
DuLNode*p=block_first;
for(inti=0;
i<
=flag;
i++)
辻(p!
二NULL)
data・state二Free;
prior!
=block_first&
prior->
data.state—Free)//与前面的空闲块相连
data・size+=p->
next=p->
next~>
prior;
next!
=block_last&
next->
data・state==Free)//
与后面的空闲块相连
data.size+=p->
prior=p;
辻(p->
next==block_last&
data.state二二Free)//与最后的空闲块相连
next二NULL;
〃显示主存分配情况
voidshow()
intflag=0;
,z\n主存分配情况:
\n"
;
cout〈〈"
++++++++++++++++++++++++++++++++++++++++++++++\n\rT;
,z分区号\t起始地址\t分区大小\t状态\n\n"
while(p)
,/"
<
〈flag++«
"
\t"
,/,,«
p~>
data.address«
,,\t\t,/;
data.size«
KB\t\t"
if(p->
data・state==Free)cout〈〈〃空闲\n\n"
,z已分配\n\n"
++++++++++++++++++++++++++++++++++++++++++++++\n\n"
//主函数
voidmain()
//算法选择标记
〃请输入所使用的内存分配算法:
\rT;
cout<
C(l)首次适应算法\n
(2)最佳适应算法\n(3)最差适应算法\n〃;
cin»
ch;
while(ch<
lIch>
3)
,z输入错误,请重新输入所使用的内存分配算法:
\n〃;
InitblockO:
//开创空间表
intchoice;
//操作选择标记
while
(1)
show();
〃请输入您的操作:
〃;
,,\nl:
分配内存\n2:
回收内存\n0:
退出\n"
choice;
if(choice=l)alloc(ch);
//分配内存
elseif(choice=2)//内存回收
zz请输入您