分区分配算法
来源:互联网 发布:桂林绿源网络 编辑:程序博客网 时间:2024/06/07 18:32
实验:分区分配算法——BF和FF
实验分析
1. 首先声明一个结构体,里面有区号,空闲区长度,空闲区的地址,和指向本身类型的指针。
2. 空闲分区的创建(和单链表创建差不多)
3. 作业的链表创建.
4. FF.BF,WF的排序算法。
5. FF,BF,WF的算法。
(一).FF算法的代码
#include<stdlib.h>
#include<stdio.h>
#include<malloc.h>
typedef struct re
{
intnumber;//区号
intlength;//长度
intaddress;//地址
struct re*next;
}RE;
RE *create()//空闲分区的创建
{
RE*head,*p,*r,*s,*t;
inti,x,temp;
head=r=NULL;
printf("请输入分区的总数:");
scanf("%d",&x);
for(i=0;i<x;i++)
{
p=(RE*)malloc(sizeof(RE));
printf("分区号 分区长度 分区地址");
scanf("%d %d%d",&p->number,&p->length,&p->address);
if(head==NULL)//链表为空
{
head=p;
p->next=NULL;
r=p;
}
else{
p->next=r->next;
r->next=p;
}
r=p;
}
if(r) r->next=NULL;
return head;
}
RE *pcreate()//作业链表的创建
{
RE*p,*phead,*r;
int i,x;
phead=NULL;
printf("作业个数:");
scanf("%d",&x);
printf("作业的大小:");
for(i=0;i<x;i++)
{
p=(RE*)malloc(sizeof(RE));
scanf("%d",&p->length);
if(phead==NULL)
{
phead=p;
p->next=NULL;
r=p;
}
else {
p->next=r->next;
r->next=p;
}
r=p;
}
if(r)r->next=NULL;
returnphead;
}
void printf(RE *head)
{
RE *p,*q;
p=head;
while(p)
{
printf("%d %d %d",p->number,p->length,p->address);
printf("\n");
p=p->next;
}
}
RE *FFsort(RE *head)//排序函数
{
RE *s,*t,*p;
inttemp,Temp,TEmp;
s=head;
t=head->next;
while(s->next)
{
while(t)
{
if(s->address>t->address)
{
temp=s->address;
s->address=t->address;
t->address=temp;
Temp=s->number;
s->number=t->number;
t->number=Temp;
TEmp=s->length;
s->length=t->length;
t->length=TEmp;
}
t=t->next;
}
s=s->next;
t=s->next;
}
return head;
}
RE*FF(RE*head)
{
RE*p,*q,*r,*phead,*t;
q=phead=pcreate();
p=FFsort(head);
while(p&&q)
{
if(p->length>q->length)
{
p->length=p->length-q->length;
p->address=p->address+q->length;
p=FFsort(head);//重新排序
q=q->next;
}
elsep=p->next;
}
p=FFsort(head);//重新排完序后的头指针
return p;
}
int main()
{
RE *head,*p;
head=create();
printf(head);
p=FF(head);
printf("剩余的空闲分区为:\n");
printf(p);
}
注意事项:
1. 排序算法是用冒泡排序算法,注意在双重循环的关系,t要始终为t=s->next;
2. 冒泡排序算法中,第一重的循环条件为while(s->next),而第二重为while(t);
3. 在FF算法中,每执行完一次都要排序
p=FFsort(head);//重新排序。
二).BF算法代码
#include<stdlib.h>
#include<stdio.h>
#include<malloc.h>
typedef structre
{
int number;//区号
int length;//长度
int address;//地址
struct re *next;
}RE;
RE *create()//空闲分区的创建
{
RE *head,*p,*r;
int i,x;
head=r=NULL;
printf("请输入分区的总数:");
scanf("%d",&x);
for(i=0;i<x;i++)
{
p=(RE*)malloc(sizeof(RE));
printf("分区号 分区长度 分区地址");
scanf("%d %d%d",&p->number,&p->length,&p->address);
if(head==NULL)//链表为空
{
head=p;
p->next=NULL;
r=p;
}
else {
p->next=r->next;
r->next=p;
}
r=p;
}
if(r) r->next=NULL;
return head;
}
RE *pcreate()//作业链表的创建
{
RE*p,*phead,*r;
int i,x;
phead=NULL;
printf("作业个数:");
scanf("%d",&x);
printf("作业的大小:");
for(i=0;i<x;i++)
{
p=(RE*)malloc(sizeof(RE));
scanf("%d",&p->length);
if(phead==NULL)
{
phead=p;
p->next=NULL;
}
else {
p->next=r->next;
r->next=p;
}
r=p;
}
if(r) r->next=NULL;
return phead;
}
void printf(RE*head)
{
RE *p,*q;
p=head;
while(p)
{
printf("%d %d%d",p->number,p->length,p->address);
printf("\n");
p=p->next;
}
}
RE *BFsort(RE*head)//排序函数
{
RE *s,*t;
int temp,Temp,TEmp;
s=head;
t=head->next;
while(s->next)
{
while(t)
{
if(s->length>t->length)
{
temp=s->address;
s->address=t->address;
t->address=temp;
Temp=s->number;
s->number=t->number;
t->number=Temp;
TEmp=s->length;
s->length=t->length;
t->length=TEmp;
}
t=t->next;
}
s=s->next;
t=s->next;
}
return head;
}
RE*BF(RE*head)
{
RE*p,*q,*r,*phead;
int x;
q=phead=pcreate();
p=BFsort(head);
while(q&&p)
{
if(p->length>=q->length)
{
p->length=p->length-q->length;
p->address=p->address+q->length;
p=BFsort(head);//重新排序
q=q->next;
}
else {
p=p->next;
}
}
p=BFsort(head);//重新排完序后的头指针
return p;
}
int main()
{
RE*head,*p;
head=create();
printf(head);
p=BF(head);
printf("剩余的空闲分区为:\n");
printf(p);
}
- 内存分区分配算法
- 动态分区分配算法
- 分区分配算法
- 动态分区分配算法
- 动态分区分配--最先适应分配算法
- 操作系统内存分区分配算法演示
- 最佳适应算法 动态分区分配
- 动态分区分配-首次适应算法
- 可变式分区的分配算法
- 动态分区分配-首次适应算法
- 【操作系统总结】动态分区分配算法
- 实验四 动态分区分配算法
- 分区管理的内存分配算法
- 【OS】动态分区分配算法的比较
- 【操作系统 - 4】动态分区分配算法
- 操作系统之动态分区分配算法
- 动态分区分配-循环首次适应算法+最佳适应算法
- 存储管理动态分区分配及回收算法
- Android Sqlite库基本操作
- U3D插件 Build Report Tool 自述文件
- Android线程同步
- Mysql分区表Partition
- mysql字符集问题
- 分区分配算法
- 团体程序设计天梯赛L2-010 排座位
- 百度地图根据位置获取对应的位置中文
- 关于ie浏览器调试xml文件
- live555服务器端、客户端源代码分析总结
- C#解压zip和rar文件
- 最全面的65条最常用正则表达式
- Git远程操作详解
- Volatile关键字