首次适应算法,最佳适应算法,最坏适应算法源代码(The first adaptation algorithm, the best adaptation algorithm, the worst adaptation algorithm source code)
首次适应算法,最佳适应算法,最坏适应算法源代码(The first adaptation algorithm, the best adaptation algorithm, the worst adaptation algorithm source code)
#包括< iostream。”
#包括<
#定义自由0 / /空闲状态
#定义忙碌的1 /已用状态
#定义好1 / /完成
#定义错误0 / /出错
#定义max_length 640 / /最大内存空间为640kb
这是一个状态;
中断标志;
typedef struct freearea /定义一个空闲区说明表结构
{
长尺寸;/ /分区大小
长/分区地址地址;
int状态;/ /状态
} ElemType;
/ /线性表的双向链表存储结构
typedef struct dulnode
{
数据域;
结构dulnode *前;/ /前趋指针
结构dulnode *下;/ /后继指针
}
DuLNode * dulinklist;
dulinklist block_first;/ /头结点
dulinklist block_last;/ /尾结点
状态函数(int);/ /内存分配
状态自由(int);/ /内存回收
状态first_fit(int);/ /首次适应算法
状态best_fit(int);/ /最佳适应算法
状态worst_fit(int);/ /最差适应算法
show() /查看分配无效;
状态initblock();/ /开创空间表
状态initblock() /开创带头结点的内存空间链表
{
block_first =(dulinklist)malloc(sizeof(dulnode));
block_last =(dulinklist)malloc(sizeof(dulnode));
block_first ->前= null;
block_first ->下= block_last;
block_last ->前= block_first;
block_last ->下= null;
block_last ->数据地址= 0;
block_last ->数据大小= max_length;
block_last ->数据状态=自由;
还可以;
}
/ /分配主存
状态函数(int ch)
{
int请求=0;
cout <
请求;
如果(要求小于0 | |请求= = 0)
{
cout <
返回错误;
}
如果(CH = = 2)/选择最佳适应算法
{
如果(best_fit(请求)= =好)cout <
别的cout <
还可以;
}
如果(CH = = 3)/选择最差适应算法
{
如果(worst_fit(请求)= =好)cout <
别的cout <
还可以;
}
其他/ /默认首次适应算法
{
如果(first_fit(请求)= =好)cout <
别的cout <
还可以;
}
}
/ /首次适应算法
状态first_fit(int请求)
{
/ /为申请作业开辟新空间且初始化
dulinklist温度=(dulinklist)malloc(sizeof(dulnode));
温度>数据=大小=请求;
温度>数据=状态=忙;
dulnode×P = block_first ->下;
而(P)
{
如果(p = >数据,状态= =数据)。
{ //有大小恰好合适的空闲块
数据>状态=忙;
还可以;
打破;
}
如果(p = >数据,状态=数据)。
{ //有空闲块能满足需求且有剩余
前值;
温度>下一个;
温度- >数据。地址= P > data.address;
前>下;
p =前=温度;
P—>数据。地址=温度->数据-> data.size地址+温度;
数据=大小=请求;
还可以;
打破;
}
下一页;
}
返回错误;
}
/ /最佳适应算法
状态best_fit(int请求)
{
INT CH;/ /记录最小剩余空间
dulinklist温度=(dulinklist)malloc(sizeof(dulnode));
温度>数据=大小=请求;
温度>数据=状态=忙;
dulnode×P = block_first ->下;
dulnode *q = null;/ /记录最佳插入位置
而(P)/初始化最小空间和最佳