bool ff(int number,int size)//首次适应算法 { pNod temp= new Free_Node; Free_Node *p=headNode->next; //从首节点开始 temp->date.number=number; temp->date.size=size; temp->date.flag=BUSY; while(p) { if (p->date.flag==FREE && p->date.size == size )//请求大小刚好满足 { p->date.flag=BUSY; p->date.number=number; return true; } if (p->date.flag==FREE && p->date.size>size)//说明还有其他的空闲区间 { temp->next=p; temp->prior=p->prior; temp->date.begin_address=p->date.begin_address; p->prior->next=temp; p->prior=temp; p->date.begin_address=temp->date.begin_address+temp->date.size;//空闲分区开始地址+此次分配的空间 p->date.size-=size; //分配空闲作业 return true; } p=p->next; } return false; }改为最差适应算法
时间: 2024-02-21 18:59:15 浏览: 82
将该函数改为最差适应算法的代码如下所示:
```
bool wf(int number, int size) {
Free_Node* temp = new Free_Node;
Free_Node* p = headNode->next;
Free_Node* worst_node = nullptr; // 最差适应算法需要记录最大空闲区间
int max_size = -1; // 最差适应算法需要记录最大空闲区间的大小
temp->date.number = number;
temp->date.size = size;
temp->date.flag = BUSY;
while (p) {
if (p->date.flag == FREE && p->date.size >= size) { // 如果空闲区间大小满足要求
if (p->date.size > max_size) { // 找到更大的空闲区间
max_size = p->date.size;
worst_node = p;
}
}
p = p->next;
}
if (worst_node) { // 找到了空闲区间
temp->next = worst_node;
temp->prior = worst_node->prior;
temp->date.begin_address = worst_node->date.begin_address;
worst_node->prior->next = temp;
worst_node->prior = temp;
worst_node->date.begin_address = temp->date.begin_address + temp->date.size;
worst_node->date.size -= size;
worst_node->date.flag = FREE;
return true;
}
return false;
}
```
需要注意的是,最差适应算法需要记录最大空闲区间,因此在遍历空闲区间时需要记录当前的最大空闲区间。
阅读全文