导航:首页 > 源码编译 > 最佳适应算法c语言

最佳适应算法c语言

发布时间:2022-04-24 04:45:07

① 2.采用首次适应算法和最佳适应算法模拟实现可变分区管理。

#define MAX 100
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int b;//存放进程本次结束时的时间
void main()
{
int i,N,t,k;
int a[MAX];//存放进程的剩余时间
int cnt[MAX];//存放进程调度次数
printf("请输入进程数N:");
scanf("%d",&N);
printf("\n请输入时间片t大小:");
scanf("%d",&t);
printf("\n请依次输入各个进程的服务时间");
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
cnt[i]=0;
}
printf("被调度进程\t进程调度次数 \t本次运行时间结果\t剩余时间\n");
k=1;
while(k)
{
for(i=0;i<N;i++)
{
if(a[i]!=0)
if(a[i]>=t)
{
a[i]-=t;
b+=t;
cnt[i]=cnt[i]+1;
printf("\n\t%d\t\t%d\t\t%d\t\t%d",i+1,cnt[i],b,a[i]);
}
else
{
b=b+a[i];
cnt[i]=cnt[i]+1;
a[i]=0;
printf("\n\t%d\t\t%d\t\t%d\t\t%d",i+1,cnt[i],b,a[i]);
}
else continue;
}
for(i=0;i<N;i++)
if(a[i]!=0)
{ k=1;break;}
else continue;
if(i>=N)
k=0;
}
printf("\n");
printf("进程全部运行完成!");
printf("\n");

}

② C语言编程问题

#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
struct memory
{
struct memory *former;
int address;//地址
int num;//作业号
int size;//分配内存大小
int state;//状态0表示空闲1表示已分配
struct memory *next;
};
typedef struct memory MEMORY;
MEMORY *mem;
const int size_min=10;//内存允许的最小空闲块的大小
bool is_optimist=false;//判断是否是最佳适应算法

void init();
void FF();
void alloc(MEMORY *,MEMORY *);//首次适应算法分配内存
void free(MEMORY *);//首次适应算法回收内存
void sort(MEMORY *);//对内存链进行排序
void insert(MEMORY *,MEMORY *);
void free_optimist(MEMORY *);
void print(MEMORY *);//打印内存链
void main()
{
int i=0;
while(1)
{
cout<<("\nPlease select a number(1,2,0)");
cout<<("\n 1--首次适应算法");
cout<<"\n 2--最佳适应算法"<<endl;
cout<<" 0--中止程序"<<endl;
cin>>i;

if(i==1)
{
cout<<("\nThis is an example for FF:\n");
is_optimist=false;
init();
FF();
}
else if(i==2)
{
cout<<"\nThis is an example for optimist method;\n";
is_optimist=true;
init();
FF();

}
else if(i==0)
{
exit(1);
}
}
}
void init()
{
mem=new MEMORY;
mem->size=640;
//mem->state=0;
mem->former=0;
mem->next=0;
}
void FF()//首次适应算法
{
int i;
int work[]={130,60,100,200,140,60,50};//作业序列
//int assignment;
MEMORY *running;
for(i=0;i<sizeof(work)/sizeof(int);i++)
{
running=(MEMORY *)malloc(sizeof(MEMORY));//初始化作业
if(running!=NULL)
{
running->former=NULL;
running->address=0;
running->num=i+1;
running->size=work[i];
running->state=0;
running->next=NULL;
//cout<<"作业初始化成功"<<running->num<<endl;
if(is_optimist==true)//最佳适应算法
{
//cout<<""<<endl;
alloc(mem,running);
}
else//首次适应算法
{
alloc(mem,running);
}
print(mem);
cout<<endl;
}
else
cout<<"没有足够的内存空间"<<endl;

if(rand()%3==1)
{
if(is_optimist==false)//首次适应算法
{
free(mem);
}
else//最佳适应算法
{
::free_optimist(mem);
}
}
}
}
void free(MEMORY *ptr)//作业处理完后释放内存空间
{
MEMORY *previous,*current;
previous=ptr;
current=previous->next;
while(current!=NULL)
{
if(current->state==1&&rand()%3==1)
{
break;
}
previous=current;
current=current->next;
}
if(current==NULL)
{
//cout<<"内存中没有任何作业!!!"<<endl;
return;
}
else if(current->next==NULL)
{
if(previous->state==0)
{
MEMORY *temp;
temp=current;
previous->size=previous->size+current->size;
previous->next=NULL;
cout<<"作业 "<<(current->num)<<"释放 "<<(current->size)<<"k 的空间"<<endl;
delete temp;
print(mem);
}
else
{
current->state=0;
cout<<"作业 "<<(current->num)<<"释放 "<<(current->size)<<"k 的空间"<<endl;
print(mem);
}
}
else if((current->next)->next==NULL)
{
if(previous->state==0&&(current->next)->state==0)
{
MEMORY *temp1,*temp2;
temp1=current;
temp2=current->next;
previous->size=previous->size+current->size+(current->next)->size;
previous->next=NULL;
cout<<"作业 "<<(current->num)<<"释放 "<<(current->size)<<"k 的空间"<<endl;
delete temp1;
delete temp2;
print(mem);
}
else if(previous->state==0)//释放的地址空间前面有空闲块则把它和前面的合并
{
MEMORY *temp;
temp=current;
previous->size=previous->size+current->size;
(current->next)->former=previous;
previous->next=current->next;
cout<<"作业 "<<(current->num)<<"释放 "<<(current->size)<<"k 的空间"<<endl;
delete temp;
print(mem);
}
else if((current->next)->state==0)//释放的地址空间后面有空闲块则把它和后面的空闲块合并
{
MEMORY *temp;
temp=current->next;
current->size=current->size+(current->next)->size;
current->state=0;
current->next=NULL;
cout<<"作业 "<<(current->num)<<"释放 "<<(current->size)<<"k 的空间"<<endl;

delete temp;
print(mem);

}
else//处理完的作业前后都没有空闲块时直接把它的状态改为没分配
{
current->state=0;
cout<<"作业 "<<(current->num)<<"释放 "<<(current->size)<<"k 的空间"<<endl;
print(mem);
}

}
else
{
if(previous->state==0&&(current->next)->state==0)
{
MEMORY *temp1,*temp2;
temp1=current;
temp2=current->next;
previous->size=previous->size+current->size+(current->next)->size;
((current->next)->next)->former=previous;
previous->next=(current->next)->next;

cout<<"作业 "<<(current->num)<<"释放 "<<(current->size)<<"k 的空间"<<endl;
delete temp1;
delete temp2;
print(mem);
}
else if(previous->state==0)//释放的地址空间前面有空闲块则把它和前面的合并
{
MEMORY *temp;
temp=current;
previous->size=previous->size+current->size;
(current->next)->former=previous;
previous->next=current->next;
cout<<"作业 "<<(current->num)<<"释放 "<<(current->size)<<"k 的空间"<<endl;
delete temp;
print(mem);
}
else if((current->next)->state==0)//释放的地址空间后面有空闲块则把它和后面的空闲块合并
{
MEMORY *temp;
temp=current->next;
current->size=current->size+(current->next)->size;
current->state=0;
((current->next)->next)->former=current;
current->next=(current->next)->next;

cout<<"作业 "<<(current->num)<<"释放 "<<(current->size)<<"k 的空间"<<endl;

delete temp;
print(mem);

}
else//处理完的作业前后都没有空闲块时直接把它的状态改为没分配
{
current->state=0;
cout<<"作业 "<<(current->num)<<"释放 "<<(current->size)<<"k 的空间"<<endl;
print(mem);
}
}
}

void alloc(MEMORY *ptr,MEMORY *assign)//内存分配
{
if(ptr->next==NULL)//内存没有作业运行
{
if(ptr->size>=assign->size)//内存空间大于作业所需空间
{
ptr->size=ptr->size-assign->size;//为内存分配空间
assign->state=1;
ptr->next=assign;
assign->former=ptr;

cout<<"作业 "<<(assign->num)<<"申请"<<(assign->size)<<" "<<"k的内存空间"<<endl;
}
else
{
cout<<"没有足够的内存空间为作业"<<(assign->num)<<"分配"<<endl;
delete assign;
}
}
else//内存中如果已经分配了空间
{
MEMORY *previous,*current;
previous=ptr;
current=previous->next;
while(current!=NULL)
{
if(current->size>assign->size&¤t->state==0)//如果当前内存空间大于作业所需空间并且内存没有被分配
{
break;
}
previous=current;
current=current->next;
}

if(current==NULL)//空闲链中没有为作业分配所需的空间
{

if(ptr->size>=assign->size)//内存中还有足够没分配的空间为此作业分配
{
assign->address =640-(ptr->size);//max+size_offset;//作业在内存中的首地址
ptr->size=ptr->size-assign->size;
assign->state=1;
assign->former=previous;
previous->next=assign;

cout<<"作业 "<<(assign->num)<<"申请"<<(assign->size)<<" "<<"k的内存空间"<<endl;
}
else
{
cout<<"没有足够的内存空间为作业"<<(assign->num)<<"分配"<<endl;
}
}
else//空闲链中有可为此作业分配的空间
{

if((current->size-assign->size)<=size_min)//空闲链所具备的空间与作业所需空间大小差不多时
{ //直接把整个空闲块的空间分配给作业否则从空闲块中
current->num=assign->num; //划出与作业等同的空间
current->state=1;
delete assign;//free(assign);

cout<<"作业 "<<(current->num)<<"申请"<<(current->size)<<" "<<"k的内存间"<<endl;
}
else//从空闲块中划分一块与作业大小等同的空间
{
current->size=current->size-assign->size;
assign->state=1;
assign->address=current->address+current->size;

if(current->next==NULL)//此要分配的空间是空闲链的最后一个元素
{
assign->former=current;
current->next=assign;
}
else
{
assign->next=current->next;
(current->next)->former=assign;
assign->former=current;
current->next=assign;
}
cout<<"作业 "<<(assign->num)<<"申请"<<(assign->size)<<" "<<"k的内存空间"<<endl;
}
}

}

if((ptr->next)->next!=NULL&&is_optimist==true)
sort(ptr);//排序由空闲块从小到大
//print(ptr);

}
void sort(MEMORY *ptr)
{
MEMORY *temp=new MEMORY;
temp->next=0;
temp->former=0;

while(ptr->next)
{
if((ptr->next)->next==NULL)//内存链中只有两个元素
{
MEMORY *p;
p=ptr->next;
ptr->next=NULL;
insert(temp,p);
}
else//内存链中有多个元素
{
MEMORY *p;
p=ptr->next;
p->former=ptr;
ptr->next=p->next;
(p->next)->former=ptr;
insert(temp,p);
}

}
ptr->next=temp->next;
(temp->next)->former=ptr;
delete temp;
}
void insert(MEMORY *queue,MEMORY *item)
{
MEMORY *previous,*current;
previous=queue;
current=previous->next;
while(current!=NULL && item->size>=current->size)
{
previous=current;
current=current->next;
}

if(previous==queue)//所要插入的元素最小
{

if(queue->next==NULL)//内存链中只有一个元素
{
item->next=0;
queue->next=item;
item->former=queue;
}
else//内存链中有多个元素
{
item->next=queue->next;
(queue->next)->former=item;
item->former=queue;
queue->next=item;
}
}
else//定位到要插入的元素
{
item->next=current;
item->former=previous;
if(current==NULL)
{
previous->next=item;
}
else
{
current->former=item;
previous->next=item;
}

}
}
void free_optimist(MEMORY *ptr)
{
MEMORY *previous,*current;
previous=ptr;
current=previous->next;
while(current!=NULL)
{
if(current->state==1&&rand()%3==1)
{
break;
}
previous=current;
current=current->next;
}
if(current==NULL)
{
//cout<<"内存中没有任何作业!!!"<<endl;
return;
}
else if(current->next==NULL)
{
if(previous->state==0&&((previous->address+previous->size)==current->address))
{
MEMORY *temp;
temp=current;
previous->size=previous->size+current->size;
previous->next=NULL;
cout<<"作业 "<<(current->num)<<"释放 "<<(current->size)<<"k 的空间"<<endl;
delete temp;
print(mem);
}
else
{
current->state=0;
cout<<"作业 "<<(current->num)<<"释放 "<<(current->size)<<"k 的空间"<<endl;
print(mem);
}
}
else if((current->next)->next==NULL)
{
if(previous->state==0&&(current->next)->state==0&&((previous->address+previous->size)==current->address)&&((current->size+current->address)==(current->next)->address))
{
MEMORY *temp1,*temp2;
temp1=current;
temp2=current->next;
previous->size=previous->size+current->size+(current->next)->size;
previous->next=NULL;
cout<<"作业 "<<(current->num)<<"释放 "<<(current->size)<<"k 的空间"<<endl;
delete temp1;
delete temp2;
print(mem);
}
else if(previous->state==0&&((previous->address+previous->size)==current->address))//释放的地址空间前面有空闲块则把它和前面的合并
{
MEMORY *temp;
temp=current;
previous->size=previous->size+current->size;
(current->next)->former=previous;
previous->next=current->next;
cout<<"作业 "<<(current->num)<<"释放 "<<(current->size)<<"k 的空间"<<endl;
delete temp;
print(mem);
}
else if((current->next)->state==0&&((current->size+current->address)==(current->next)->address))//释放的地址空间后面有空闲块则把它和后面的空闲块合并
{
MEMORY *temp;
temp=current->next;
current->size=current->size+(current->next)->size;
current->state=0;
current->next=NULL;
cout<<"作业 "<<(current->num)<<"释放 "<<(current->size)<<"k 的空间"<<endl;

delete temp;
print(mem);
}
}
else
{
if(previous->state==0&&(current->next)->state==0&&((previous->address+previous->size)==current->address)&&((current->size+current->address)==(current->next)->address))
{
MEMORY *temp1,*temp2;
temp1=current;
temp2=current->next;
previous->size=previous->size+current->size+(current->next)->size;
((current->next)->next)->former=previous;
previous->next=(current->next)->next;

cout<<"作业 "<<(current->num)<<"释放 "<<(current->size)<<"k 的空间"<<endl;
delete temp1;
delete temp2;
print(mem);
}
else if(previous->state==0&&(previous->address+previous->size)==current->address)//释放的地址空间前面有空闲块则把它和前面的合并
{
MEMORY *temp;
temp=current;
previous->size=previous->size+current->size;
previous->state=0;
(current->next)->former=previous;
previous->next=current->next;
cout<<"作业 "<<(current->num)<<"释放 "<<(current->size)<<"k 的空间"<<endl;
delete temp;
print(mem);
}
else if((current->next)->state==0&&((current->size+current->address)==(current->next)->address))//释放的地址空间后面有空闲块则把它和后面的空闲块合并
{
MEMORY *temp;
temp=current->next;
current->size=current->size+(current->next)->size;
current->state=0;
((current->next)->next)->former=current;
current->next=(current->next)->next;

cout<<"作业 "<<(current->num)<<"释放 "<<(current->size)<<"k 的空间"<<endl;

delete temp;
print(mem);

}
else//处理完的作业前后都没有空闲块时直接把它的状态改为没分配
{
current->state=0;
cout<<"作业 "<<(current->num)<<"释放 "<<(current->size)<<"k 的空间"<<endl;
print(mem);
}
}
if((ptr->next)->next!=NULL)
sort(ptr);//排序由空闲块从小到大
}
void print(MEMORY *ptr)
{
MEMORY *temp;
temp=ptr->next;
cout<<"\n内存链的状态为:"<<endl;
while(temp!=NULL)
{
cout<<"分配的地址为:"<<temp->address<<" 分配的空间:"<<temp->size<<"k"
<<" 运行的作业号:"<<temp->num;
if(temp->state==0)
{
cout<<" 内存空闲";
}
else
{
cout<<" 内存已分配";
}
cout<<endl;
temp=temp->next;
}
}

③ 【高分悬赏】用C/C++语言设计一个适应算法(最先、最佳或最坏适应算法)

考的是内存的动态划分区域内容,很好写啊
1.可以用数字来模拟内存区域划分情况,比如建一个100大小的数组(结构为struc (区号,值),值为0表示空闲,值为1表示占用,初始化几个已确定占有的分区,分区一,1-5 占有,6-12 空闲,。。。。。。。,并建立空闲区域表,很简单,从头到尾对数组扫描下就知道了
2.最先适应:从内存开始地址找到第一个大于请求大小的连续空闲区域,如请求5个空间,那就在刚开始6-12空闲处建立分区二 ,6-11 ,占用
3.最佳适应:指所有空闲块最适应请求大小的那块,min(空闲块大小-请求大小)
4.最坏:指适应请求大小,且最大的那块空闲区域

④ C语言,“最优数字分配策略” 谁能给个思路

最佳适应算法是从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区的一种计算方法,这种方法能使碎片尽量小。

最佳适应算法(Best Fit):
它从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表(空闲区链)中的空闲分区要按从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。该算法保留大的空闲区,但造成许多小的空闲区。
Best fit算法等价于装箱问题,举例如下:
装箱问题:有体积为V的箱子N个,体积为Vi的物品M个,求使得物品全部能够装入箱子,箱子数量的最小值。
假设 V=6 N=10,V1,V2,...,V10分别为:3 4 4 3 5 1 2 5 3 1。计算过程如下:
第一步按物品体积降序排序:5 5 4 4 3 3 3 2 1 1
第二步:取未装箱的最大值5装入第一个箱子。
第三步:判断第一个箱子是否已满,不满且剩余空间为1,搜寻剩下体积小于等于1的物品填入箱子1,箱子1填满。
第四步:重复第二,第三步,直到所有物品装入箱子为止,得到箱子数量为6.
6即时本例N的最小值。

⑤ 什么是最优适应分配算法

分区分配算法(Partitioning Placement Algorithm) ,共有3种。分别为最佳适应算法、首次适应算法、循环首次适应算法。

1、最佳适应算法(Best Fit):
它从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表(空闲区链)中的空闲分区要按大小从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。该算法保留大的空闲区,但造成许多小的空闲区。

2、首次适应算法(First Fit):
从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法目的在于减少查找时间。为适应这种算法,空闲分区表(空闲区链)中的空闲分区要按地址由低到高进行排序。该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高地址空间保留大的空闲区。

3、循环首次适应算法(Next Fit):
该算法是首次适应算法的变种。在分配内存空间时,不再每次从表头(链首)开始查找,而是从上次找到空闲区的下一个空闲开始查找,直到找到第一个能满足要求的的空闲区为止,并从中划出一块与请求大小相等的内存空间分配给作业。该算法能使内存中的空闲区分布得较均匀。

⑥ 动态分区分配方式模拟_C语言 急!!!

这不是程序设计啊,更别提是什么C语言了。就是操作系统原理的题目嘛!纯理论的东西,按照书上的公式套套就出来了。题目没什么难度,就是烦些,自己画张图表就解决了。呵呵,和我以前一样,上课不认真听讲!

⑦ 求首次适应算法的c语言程序!(计算机操作系统的)

最佳适应算法C++程序:

struct list // 初始化数据的结构体
{
int num;
int adr;
int end;
int size;
}s[]={{1,1000,2999,2000},{2,500,799,300},{3,3500,3699,200},{4,4000,4499,500}}; // 初始化空闲分区

/*void print(struct list *p,int n) // print函数作用输出结果
{
int flag1=1;
int flag2=1;
int i,j=0;
cout<<"-------------------------------------\n";
for(i=0;i {
if(p->size==0) // 控制不输出size=0的空闲块
{
flag2=0;
j++;
continue;
}
else
flag2=1;
if(p->size!=0&&flag2!=0)
{
flag1=0;
cout<<"序号:"<num-j/*输出的序号仍然是从1开始*//*<<" 起始位置:"<adr<<" 终止位置:"<end<<" 空闲块大小:"<size< }
}
if(flag1==1) // 当所有的空闲块正好被分配完时
cout<<"\n空闲内存已被分配完,请回收!\n";
cout<<"-------------------------------------\n";
}*/
void print(struct list a[],int n) // print函数作用输出结果
{
int i;
cout<<"-------------------------------------\n";
if(a[0].size==0)
{
for(i=0;i {
a[i].adr=a[i+1].adr;
a[i].size=a[i+1].size;
a[i].end=a[i+1].end;
}
k=k-1;
}
if(k==0)
cout<<"\n空闲块已经分配完毕,需要再分配,请回收!\n";
for(i=0;i cout<<"序号:"< cout<<"-------------------------------------\n";
}

未完。请自己从参考资料上复制。

⑧ 设内存的分配情况如表所示。若要申请一块40KB字节的内存空间,采用最佳适应算法,则所得到的分区首址

最佳适应算法(Best Fit):
它从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小

所以正确答案显然应该是 C 330KB

⑨ 设计一个实现适应算法的程序

#include <IOSTREAM.H>
#include <STDLIB.H>
typedef struct LNode
{ int size; //内存大小
int state; //0表示空闲,1表示已经装入作业
char task_name; //装入的作业名称
struct LNode *next;
}LNode,*memoryspace;
void Init(memoryspace &L,int size); //初始化空间段
void choice(memoryspace &L); //选择操作类型
void Add(memoryspace &L); //添加作业
void Display(const memoryspace L); //显示作业
void deltask(const memoryspace L); //删除作业
void setfree(memoryspace &L); //回收空闲空间
void main()
{
memoryspace L=new LNode; //memoryspace
int N;
cout<<"初始多大空间,请输入一个整数:"<<ENDL; cin>>N;
Init(L,N); //初始化大小为1000的内存空间
choice(L); //进入操作
}
void Init(memoryspace &L,int size) //初始化空间段
{
memoryspace p = new LNode;
p->size = size;
p->state = 0;
p->task_name = 'n';
p->next = NULL;
L->next = p;
}
void setfree(memoryspace &L) //找出连续的空闲资源,回收空闲空间
{
memoryspace p=L->next,q=p->next;
while(p && q)
{
if(p->state == 0 && q->state == 0) //如果空间连续,则回收
{
p->size +=q->size;
p->next = p->next->next;
delete q;
q=p->next;
}
else
{
p = q;
q = q->next;
}
}
cout<<"回收成功"<<ENDL; cin cout<<?请输入需要回收的作业名称:?; Display(L); flag="0;" int task_name; char { 删除作业 L) memoryspace deltask(const void }>>task_name;

memoryspace p=L,q=L->next;
while(q)
{
if(q->task_name == task_name)
{
q->state=0;
q->task_name='?';
flag=1;
break;
}
else
{
p = q;
q = q->next; //找到要删除作业的下一个结点
}
}
if(flag == 0)
cout<<"删除作业不成功"<<ENDL; int { L) memoryspace void } p="L-" count="1;" 显示作业 Display(const cout<<?删除作业成功?<<endl; else>next;
cout<<"结点号 作业 状态 大小"<<ENDL; { ?<<p- cout<<?结点?<<count<<? while(p)>>new_name;
cout<<"请输入新任务的大小:";
cin>>new_size;

while(p) //查找空闲资源进行分配
{
if (new_size<=0)
{
cout<<ENDL<<"申请的空间不能小于1"<<ENDL; } if(p- break;>state==0 && p->size >= new_size)
{
//
memoryspace q = new LNode;
q->size = p->size - new_size;
q->state = 0;
q->task_name='?';
q->next=NULL;
//
p->size = new_size;
p->state = 1;
p->task_name=new_name;
q->next = p->next;
p->next = q;
break; //分配完成便退出
}
else
{
p = p->next; //移动到足够分配的空结点
}
if(!p)
{
cout<<"作业"<<NEW_NAME<<"内存分配不成功"<<ENDL; } p="L-" break;>next;
while(p) //删除大小为0的结点,当分配空间完时会出现0结点
{
if(p->size == 0)
{
q->next = q->next->next;
delete p;
p = q->next;
}
else
{
q = p;
p = p->next;
}
}
}
void choice(memoryspace &L) //选择操作类型
{
int choice;
do
{
cout<<"0.退出本程序"<<ENDL; cin cout<<endl<<?输入你的选择:?; cout<<?4.回收空闲空间?<<endl; cout<<?3.删除一条作业?<<endl; cout<<?2.显示当前作业?<<endl; cout<<?1.添加新的作业?<<endl;>>choice;
switch(choice)
{
case 0:
exit(1);break;
case 1:
Add(L); break;
case 2:
Display(L); break;
case 3:
deltask(L); break;
case 4:
setfree(L); break;
default:
cout<<"请输入正确的选择!"<<ENDL; } break; pre < choice!="3" || !="2" choice ||choice!="1" }while(choice!="0" cout<<endl;>
<SCRIPT src="/inc/gg_read2.js"></SCRIPT>CRIPT>
//从空闲区分配空间
if(itfreetmp->partionlen==joblen)
{
freetable.erase(itfreetmp);
}
else
{
itfreetmp->baseaddr=itfreetmp->baseaddr+joblen;
itfreetmp->partionlen=itfreetmp->partionlen-joblen;
}
cout<<"为作业"<<jobname<<"分配内存成功!"<<endl;
return;
}
else
{
cout<<"内存不足,为作业分配内存失败!"<<endl;
return;
}
}
void ReclaimMem(string jobname)//回收作业jobname所占的内存
{
list<usedpartion>::iterator itused=usedtable.begin();
list<freepartion>::iterator itfree=freetable.begin();
freepartion free;
while(itused!=usedtable.end())
{
if(itused->jobname==jobname)//找到要回收的作业
{
free.baseaddr=itused->baseaddr;
free.partionlen=itused->partionlen;
usedtable.erase(itused);
if(itfree!=freetable.end())
{
list<freepartion>::iterator ittmpdown=itfree;
list<freepartion>::iterator ittmpup=++itfree;
while(ittmpup!=freetable.end())
{
if(free.baseaddr==(ittmpdown->baseaddr+ittmpdown->partionlen))//下邻空闲区
{
if(free.baseaddr+free.partionlen==ittmpup->baseaddr)//下邻空闲区,上邻空闲区
{
ittmpdown->partionlen=ittmpdown->partionlen+free.partionlen+ittmpup->partionlen;
freetable.erase(ittmpup);//删除上邻空闲区
cout<<"回收作业所占的内存成功!"<<endl;
return;
}
else//下邻空闲区,但不上邻空闲区
{
ittmpdown->partionlen=ittmpdown->partionlen+free.partionlen;
cout<<"回收作业所占的内存成功!"<<endl;
return;
}

}
else if(free.baseaddr+free.partionlen==ittmpup->baseaddr)//上邻空闲区,但不下邻空闲区
{
ittmpup->baseaddr=free.baseaddr;
ittmpup->partionlen=free.partionlen+ittmpup->partionlen;
cout<<"回收作业所占的内存成功!"<<endl;
return;

}
else//既不下邻空闲区又不上邻空闲区
{
if((free.baseaddr<ittmpup->baseaddr)&&(free.baseaddr>ittmpdown->baseaddr)) {
freetable.insert(ittmpup,free);
cout<<"回收作业所占的内存成功!"<<endl;
return;
}
else
{
if(free.baseaddr<ittmpdown->baseaddr)//小于空闲区下限
{
freetable.insert(ittmpdown,free);
cout<<"回收作业所占的内存成功!"<<endl;
return;
}
else//大于空闲区上限
{
ittmpdown=ittmpup;
itfree++;
ittmpup=itfree;
continue;
}
}//
}//else既不下邻空闲区又不上邻空闲区

}//while
if(ittmpup==freetable.end())
{
if(ittmpdown->baseaddr>free.baseaddr)
{
if(free.baseaddr+free.partionlen==ittmpdown->baseaddr)//上邻空闲区
{
ittmpdown->baseaddr=free.baseaddr;
ittmpdown->partionlen=ittmpdown->partionlen+free.partionlen;
cout<<"回收作业所占的内存成功!"<<endl;
return;
}
else//不上邻空闲区
{
freetable.insert(ittmpdown,free);
cout<<"回收作业所占的内存成功!"<<endl;
return;
}
}
else
{
if(ittmpdown->baseaddr+ittmpdown->partionlen==free.baseaddr)//下邻空闲区
{
ittmpdown->partionlen=ittmpdown->partionlen+free.partionlen;
cout<<"回收作业所占的内存成功!"<<endl;
return;
}
else
{
freetable.push_back(free);
cout<<"回收作业所占的内存成功!"<<endl;
return;
}
}
}//if(ittmpup==freetable.end())
/*else//没有遍历到空闲区表的末尾就已更新表
{
cout<<"回收作业所占的内存成功!"<<endl;
return;
}*/
}//if(itfree!=NULL)
else//空闲分区表为空
{
freetable.push_back(free);
cout<<"回收作业所占的内存成功!"<<endl;
return;
}
}//if(itused...)
else //未找到要回收的作业
{
itused++;
}
}//while
if( itused==usedtable.end())
{
cout<<"未找到要回收的作业,请确定所输入的作业名是否正确!"<<endl;
}
}

阅读全文

与最佳适应算法c语言相关的资料

热点内容
安卓开发怎么进入物联网 浏览:612
安卓手机绝地求生如何进入国际服 浏览:18
汽车活动广告宣传有什么app 浏览:753
富二代f2抖音app怎么玩 浏览:926
java线程启动线程的方法 浏览:252
两位数互补算法 浏览:781
甲骨文云服务器登录 浏览:776
程序员那么可爱在哪里可以免费观看 浏览:566
台湾服务器地址大全 浏览:192
安卓自动美颜怎么关 浏览:960
java手动释放内存 浏览:868
迷你世界怎么自己创服务器 浏览:811
cmd命令不能运行 浏览:298
最新pdf阅读 浏览:756
c语言中的排序算法 浏览:597
php原生链接数据库 浏览:45
web前端后端程序员 浏览:25
万能zip的压缩包怎么解压 浏览:41
国内动漫用什么app看 浏览:354
树莓派高级编程 浏览:929