广工 操作系统仿真 Best Fit最佳适应算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#define minsize 2
using namespace std;
struct Node
{
int name;
int start;
int size;
int state;
Node *pre;
Node *next;
};
typedef struct Dlinklist
{
Node *head;
}Dlist;
//===================
Dlist pro;
Dlist fre;
int memory,name,size,fit,num;
//===================
void initDlist(Dlist &L)
{
L.head=new Node;
L.head->next=L.head->pre=NULL;
}
void memoryInit()//初始化两个链表
{
initDlist(pro);
initDlist(fre);
Node *p=new Node;
p->name=0;
p->start=0;
p->state=0;
p->size=memory;
p->next=NULL;//这里曾错写成p->pre..............
p->pre=fre.head;//这里曾漏写
fre.head->next=p;
}
int getLength(Dlist &L)
{
int m=0;
Node *p=L.head->next;
while(p!=NULL)
{
m++;
p=p->next;
}
return m;
}
void arrangeSize(Dlist &L)//链表按size进行排序,从小到大
{
int length=getLength(L);
for(int i=0; i { Node *p=L.head->next; Node *q=p->next; int a,b,c; for(int j=0; j { if(p->size>q->size) { a=p->size; p->size=q->size; q->size=a; b=p->name; p->name=q->name; q->name=b; c=p->start; p->start=q->start; q->start=c; } p=p->next; q=p->next; } } } void arrangeStart(Dlist &L)//链表按startaddress进行排序,从小到大{ int length=getLength(L); for(int i=0; i { Node *p=L.head->next; Node *q=p->next; int a,b,c; for(int j=0; j { if(p->start>q->start) { a=p->size; p->size=q->size; q->size=a; b=p->name; p->name=q->name; q->name=b; c=p->start; p->start=q->start; q->start=c; } p=p->next; q=p->next; } } } void bestfit() { arrangeSize(fre); Node *s=new Node; //因为s待会要用来传递链表里的元素,所以这里要为它声明个空间 Node *q=NULL; //这里则要用NULL Node *p=fre.head->next; while(p!=NULL) { if(p->size>=size) { q=p; } p=p->next; } if(q==NULL) { cout<<" Failed to allocate memory!!"< } else { if(q->size-size<=minsize)// { q->pre->next=q->next;//呃,这里刚开始居然写成这样q->pre->next=p->next if(q->next!=NULL) q->next->pre=q->pre;