• 大小: 6KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: C/C++
  • 标签: C语言  

资源简介

用C语言编写的最坏适应算法,大家快下载吧。

资源截图

代码片段和文件信息

#include 
 #include
#define Free 0 //空闲状态  
#define Busy 1 //已用状态
#define OK 1    //完成 
 #define ERROR 0 //出错
#define MAX_length 640 //最大内存空间为KB
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 Worst_fit(intint); //最坏适应算法
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 IDrequest;
       cout<<“请输入作业(分区号):“;
       cin>>ID;
       cout<<“请输入需要分配的主存大小(单位:KB):“;
       cin>>request;
       if(request<0 ||request==0)
       {
              cout<<“分配大小不合适,请重试!“<              return ERROR;
       }
          if(Worst_fit(IDrequest)==OK) cout<<“分配成功!“<              else cout<<“内存不足,分配失败!“<             
       
   
}

//--------------------  最坏适应算法 ------------------------
Status Worst_fit(int IDint 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; //记录最佳插入位置
       while(p) //初始化最大空间和最佳位置
       {
              if(p->data.state==Free &&
                     (p->data.size>request || p->data.size==request) )
              {   q=p;
                     ch=p->data.size-request;
                     break;
              }
              p=p->next;
       }
       while(p)
       {
              
              if(p->data.state==Free && p->data.size>request)
              {//空闲块大于分配需求
                     if(p->data.size-request>ch)//剩余空间比初值还大
                     {
                            ch=p->data.size-request;//更新剩余最小值
                            q=p;//更新最佳位置指向
                     }
              }
  if(p->data.state==Free && p->data.size==request)
              {//空闲块大小恰好合适
                     p->data.ID=ID;
                     p->data.state=Busy;
                     return OK;
                     break;
              }
              p=p->next;
       }
       i

评论

共有 条评论