基本思想:BF的空闲分区表(或空闲分区链)按空闲分区大小的升序方式组织。分配时,按空闲分区表(或空闲分区链)的先后次序,从头查找,找到符合要求的第一个分区。就说明它是最适合的。大的空闲分区可以被保留下来

#include <malloc.h>
#include <stdio.h>
#include <string.h>
#define NULL 0
typedef struct table
{int address;     /*存储分区起始地址*/ int length;      /*存储分区长度*/ int flag;        /*存储分区标志,0 为空闲,1 为被作业占据*/ char name[10];   /*当flag==1 时存储分区占用标志作业名,否则存储空nil*/ struct table *next;
}node; int success=0;  /*分配成功与否的标志*/ node *insert(node *head, node *p)  /*按照“地址递增方式”将p 结点插入链表相应位置 参考优先级*/ { node *r,*q;r=head;if(head->flag)
{if(r->address>p->address){p->next=r;return p;}else{while(r->address<p->address){if(r->next==NULL){r->next=p;return head;}q=r;r=r->next;}}q->next=p;p->next=r;return head;
}else
{if(r->length>p->length){p->next=r;return p;}else{while(r->length<p->length){if(r->next==NULL){r->next=p;return head;}q=r;r=r->next;}}q->next=p;p->next=r;return head;}}node *creat()   /*根据地址递增方式建立分配分区表(flag==1)或空闲分区表(flag==0)*/
{ node *head,*p1;int n=0; char a[10]="nil";head=NULL;//建立分配分区表printf("address  length  flag<0 or 1>\n");p1=(node *)malloc(sizeof(node));scanf("%d %d %d",&p1->address,&p1->length,&p1->flag);while(p1->length!=0||p1->address!=0){if(p1->flag){printf("\t\tinput job_name:");scanf("%s",&p1->name);}else{strcpy(p1->name, "nil"); }p1->next=NULL;n=n+1;if (n==1) {head=p1;p1->next=NULL;}else head=insert(head,p1);p1=(node *) malloc (sizeof(node));scanf("%d",&p1->address);scanf("%d",&p1->length);scanf("%d",&p1->flag);}return head;
}
void print (node *head) /*输出链表*/
{node *p;p=head;if(p->flag){printf("The distributed table is !\n");}else{printf("The free table is !\n");}if(!p){printf("该链表为空!\n");}else{while(p){printf("%d,%d,%d,%s\n",p->address,p->length,p->flag,p->name);p=p->next;}printf("\n");}
}
void distribute(node *freehead, node *distributedhead, node *work)
/*在空闲分区表中找出首次合适work 的分区,同时修改空闲分区表和分配分区表*/
{ //填补程序node *p,*q,*r,*t,*news;int a,b,c,d;p=freehead;q=distributedhead;while(p){if(p->length>=work->length){d=p->address;p->address=p->address+work->length;p->length=p->length-work->length;if(p->length==0){t->next=p->next;}success=1;r=t;break;}else{t=p;p=p->next;}}if(success){while(q){a=q->address;b=q->length;c=a+b;if(c==d){news=(node *)malloc(sizeof(node));news->address=c;news->length=work->length;news->flag=1;printf("\ndistributing is successful!\n");strcpy(news->name, work->name); news->next=q->next;q->next=news;print(freehead);print(distributedhead);return;}q=q->next;}}else{printf("\ndistributing is not successful!\n");print(freehead);print(distributedhead);}
} void main() { struct table *dtable,*ftable,*work; char workn[10]; int a; printf("\nThe distributed table is:\n"); dtable=creat();
//  print(dtable);/*dtable 输入已分配情况表*/ printf("\nThe free table is:\n"); ftable=creat();
//  print(ftable);/*ftable 输入未分配情况表*/ while(1){work=(node *)malloc(sizeof(node));printf("\nThe length of worked job is:");scanf("%d",&work->length);printf("The name of worked is:");scanf("%s",&workn);strcpy(work->name, workn); distribute(ftable,dtable,work);} } 

最佳适应(BestFit)算法相关推荐

  1. 页面置换算法最佳页面置换算法模拟JAVA实现

    操作系统存储管理页面置换算法-----最佳页面置换算法模拟(JAVA实现) 话不多说,我们直接展示 package com.company;import java.util.Arrays;/*** @ ...

  2. 最佳页面置换算法代码_(存储管理)页面置换算法

    1. 最佳(OPT,Optimal) 所选择的被换出的页面将是永久或者是最长时间内不再被访问,通常可以保证获得最低的缺页率.是一种理论上的算法,因为无法知道一个页面多长时间不再被访问.所以常用于评价其 ...

  3. 近似算法的近似率_选择最佳近似最近算法的数据科学家指南

    近似算法的近似率 by Braden Riggs and George Williams (gwilliams@gsitechnology.com) Braden Riggs和George Willi ...

  4. 孤立森林:大数据背景下的最佳异常检测算法之一

    孤立森林或"iForest"是一个非常漂亮和优雅简单的算法,可以用很少的参数来识别异常.原始的论文对广大的读者来说是容易理解的,并且包含了很少的数学知识.在这篇文章中,我将解释为什 ...

  5. 最佳值换算法c语言,页面置换算法---最佳置换算法(OPT)

    最佳置换算法(OPT) 什么是OPT 最佳置换算法,其所选择的被淘汰的页面将是以后永不使用的,或是在最长(未来)时间内不再被访问的页面.采用最佳置换算法通常可保证最低的缺页率.但是人们目前还无法与之, ...

  6. 最佳页面置换算法详解

    最佳置换算法,OPT, 简单说,最佳置换算法选择的是被淘汰的页面以后永不使用,或者是在最长时间内不再访问,以便保证最低的缺页率,,但该算法只存于理论中,无法实现 ,其中置换的关键是,置换后面待用的最远 ...

  7. 快速近似最近邻算法_数据科学家指南,以选择最佳近似最近邻算法

    快速近似最近邻算法 by Braden Riggs and George Williams (gwilliams@gsitechnology.com) Braden Riggs和George Will ...

  8. 全网最佳优惠券使用算法

    每逢过节网上购物,不论哪个平台都会发放很对优惠券,如何在结账时最合理的使用已有的优惠券平台是不会告诉你的,作为程序员的我们写一套算法得到最优使用方法是一件很有趣的事,关键是目前全网好像没有比较靠谱的答 ...

  9. 2022年度盘点:十大最佳开源SLAM算法

    激光雷达里程计 香港大学开源激光雷达惯性视觉里程计FAST-LIVO 论文名:FAST-LIVO: Fast and Tightly-coupled Sparse-Direct LiDAR-Inert ...

  10. 二分图最佳匹配 KM算法 Hdu2255奔小康赚大钱 + Poj 3565 Ants

    2014-10-4 更新 在最下面增加了基于邻接表的模板 理论:http://blog.sina.com.cn/s/blog_691ce2b701016reh.html http://philosci ...

最新文章

  1. 红外测试操作步骤_红外传感实验操作步骤及数据分析(无测试实图)
  2. 20162313苑洪铭 第二周作业
  3. 计算机常考应用分析题,计算机常见故障及排除
  4. PyTorch随笔-1
  5. P4389 付公主的背包(生成函数,多项式exp)
  6. 北京市(朝阳区)(西城区)(海定区)正则表达式(代码保存)
  7. wkhtmltopdf网页转PDF程序安装教程
  8. 【MatConvNet】配置GPU
  9. 基于matlab车牌识别算法
  10. memtest86内存测试工具介绍
  11. ubuntu 下载 迅雷
  12. 斯坦福AI百年报告2017:人工智能与机器学习全景式概览
  13. Imitate_ProcessRR轮盘调度
  14. 公交路线查询数据接口简单介绍
  15. 806管理学原理考研复习资料
  16. 多维数组展平的几种方式
  17. 金蝶K/3 固定置产相关SQL语句
  18. bzoj 5245: [Fjwc2018]欧拉函数 线段树+bitset
  19. 车载系统升级、“特饭”会员品牌上线,解读新特背后的互联网产品逻辑
  20. 【SAM】51Nod1647 小Z的Trie

热门文章

  1. 从亏损19亿到盈利6亿,恺英网络做对了什么?
  2. android qq skype,蓝牙耳机与IVT组合实现在电脑聊天、打电话(QQ、Skype)
  3. 校验EXE文件防止软件被破解
  4. c语言字符串的加减乘除,c语言加减乘除代码
  5. 计算机桌面设置,电脑怎么设置动态桌面
  6. 电脑报独家报道:宽带升级全国真相调查
  7. form表单label加问号图标以及提示词
  8. java oop 题目_JavaOOP试题JavaOOP试题.doc
  9. 2012年最具影响力路由器配置精品文章荟萃【108篇】
  10. 运算放大器---封装尺寸