最坏适应算法也可初始化俩张表,一张表是进程分配表,一张是空闲区按从小到大的排序表,每次分配的时候只需判断空闲区的尾指针是否满足要求,满足则分配,不满足则输出内存不够请等待
代码
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#define Free 0 //空闲状态
#define Busy 1 //已用状态
#define OK 1 //完成
#define ERROR 0 //出错
typedef int Status;
int flag;
/**
*设置空闲块
*有三个标识符
*address起始地址
*size空闲块大小
*state空闲块状态
*/
typedef struct freearea
{
int address;//空闲区地址
int size;//作业空间大小
int state;//空闲去状态
} ElemType;
/**
*定义俩张表分别用于存放内存分配表和空闲表
*内存分配表为*DuLinkList2,空闲表为*DuLinkList1
*/
typedef struct DuLNode
{
ElemType data;
struct DuLNode *prior;
struct DuLNode *next;
} DuLNode, *DuLinkList1,*DuLinkList2;
/**
*block_first
*链表首地址
*block_last
*链表尾地址
*/
DuLinkList1 block_first1;
DuLinkList1 block_last1;
DuLinkList2 block_first2;
DuLinkList2 block_last2;
void alloc(int);
void free(int);
Status worst(int);
void show();
/**
*进程分配表DuLinkList2的初始化
*/
void initblock()
{
block_first2=(DuLinkList2)malloc(sizeof(DuLNode));
block_last2=(DuLinkList2)malloc(sizeof(DuLNode));
block_first2->prior=NULL;
block_first2->next=block_last2;
block_last2->prior=block_first2;
block_last2->next=NULL;
}
/**
*初始化空闲表DuLinkList1
*传入用户需设置的内存大小MAX_length
*/
void initblock(int MAX_length)
{
block_first1=(DuLinkList1)malloc(sizeof(DuLNode));
block_last1=(DuLinkList1)malloc(sizeof(DuLNode));
block_first1->prior=NULL;
block_first1->next=block_last1;
block_last1->prior=block_first1;
block_last1->