#include
#include
#define Free 0 //空闲状态
#define Busy 1 //已用状态
#define OK 1
//完成
#define ERROR 0 //出错
#define MAX_length 1280 //最大内存空间为1280KB
typedef int Status;
typedef struct freearea//定义一个空闲区说明表结构
{
int ID;
//分区号
long size;
//分区大小
long address; //分区地址
int state;
//状态
}ElemType;
//---------- 线性表的双向链表存储结构
------------
typedef struct DuLNode //double linked list
{
ElemType data;
struct DuLNode *prior; //前趋指针
struct DuLNode *next;
//后继指针
}DuLNode,*DuLinkList;
DuLinkList block_first; //头结点
DuLinkList block_last; //尾结点
Status alloc(int);//内存分配
Status free(int); //内存回收
Status First_fit(int,int);//首次适应算法
Status Best_fit(int,int); //最佳适应算法
void show();//查看分配
Status Initblock();//开创空间表
Status Initblock()//开创带头结点的内存空间链表
{
block_first=(DuLinkList)malloc(sizeof(DuLNode));
block_last=(DuLinkList)malloc(sizeof(DuLNode));
block_first->prior=NULL;
block_first->next=block_last;
block_last->prior=block_first;
block_last->next=NULL;
block_last->data.address=0;
block_last->data.size=MAX_length;
block_last->data.ID=0;
block_last->data.state=Free;
return OK;
}
//----------------------- 分 配 主 存 -------------------------
Status alloc(int ch)
{
int ID,request;
printf("请输入作业(分区号):");
scanf("%d",&ID);
printf("请输入需要分配的主存大小(单位:KB):");
scanf("%d",&request);
return
0;
}
//首次适应算法
Status First_fit(int ID,int request)//传入作业名及申请量
{
DuLinkList
temp=(DuLinkList)malloc(sizeof(DuLNode));
temp->data.ID=ID;
temp->data.size=request;
temp->data.state=Busy;
DuLNode *p=block_first->next;
return
0;
}
//最佳适应算法
Status Best_fit(int ID,int request)
{
int ch; //记录最小剩余空间
DuLinkList
temp=(DuLinkList)malloc(sizeof(DuLNode));
temp->data.ID=ID;
temp->data.size=request;
temp->data.state=Busy;
DuLNode *p=block_first->next;
DuLNode *q=NULL; //记录最佳插入位置
return 0;
}
//主存回收
Status free(int ID)
{
DuLNode *p=block_first;
return
0;
}
//显示主存分配情况
void show()
{
printf("+++++++++++++++++++++++++++++++++++++++\n");
printf("+++
主 存 分 配 情
况
+++\n");
printf("+++++++++++++++++++++++++++++++++++++++\n");
DuLNode *p=block_first->next;
while(p)
{
printf("分 区 号:");
if(p->data.ID==Free)
printf("Free\n");
else
printf("%d\n",p->data.ID);
printf("起始地址:%d\n",p->data.address);
printf("分区大小:%d
KB\n",p->data.size);
printf("状
态:");
if(p->data.state==Free)
printf("空 闲\n");
else printf("已分配\n");
printf("——————————————\n");
p=p->next;
}
}
//主函数
void main()
{
int ch;//算法选择标记
printf("
动态分区分配方式的模拟
\n");
printf("************************************\n");
printf("** 1)首次适应算法 2)最佳适应算法
**\n");
printf("************************************\n");
printf("请选择分配算法:");
scanf("%d",&ch);
Initblock(); //开创空间表
int choice; //操作选择标记
while(1)
{
printf("********************************************\n");
printf("**
1:
分配内存
2:
回收内存
**\n");
printf("**
3:
查看分配
0: 退
出
**\n");
printf("********************************************\n");
printf("请输入您的操作 :");
scanf("%d",&choice);
if(choice==1) alloc(ch); //
分配内存
else
if(choice==2) // 内存回收
{
int ID;
printf("请输入您要释放的分区号:");
printf("%d",&ID);
free(ID);
}
else if(choice==3)
show();//显示主存
else if(choice==0) break;
//退出
else //输入操作有误
{
printf("输入有误,请重试!\n");
continue;
}
}
}
#include
#define Free 0 //空闲状态
#define Busy 1 //已用状态
#define OK 1
#define ERROR 0 //出错
#define MAX_length 1280 //最大内存空间为1280KB
typedef int Status;
typedef struct freearea//定义一个空闲区说明表结构
{
}ElemType;
//----------
typedef struct DuLNode //double linked list
{
}DuLNode,*DuLinkList;
DuLinkList block_first; //头结点
DuLinkList block_last;
Status alloc(int);//内存分配
Status free(int); //内存回收
Status First_fit(int,int);//首次适应算法
Status Best_fit(int,int); //最佳适应算法
void show();//查看分配
Status Initblock();//开创空间表
Status Initblock()//开创带头结点的内存空间链表
{
}
//----------------------- 分 配 主 存 -------------------------
Status alloc(int ch)
{
}
//首次适应算法
Status First_fit(int ID,int request)//传入作业名及申请量
{
}
//最佳适应算法
Status Best_fit(int ID,int request)
{
}
//主存回收
Status free(int ID)
{
}
//显示主存分配情况
void show()
{
}
//主函数
void main()
{
}