首次适应算法和最佳适应算法和循环首次适应算法和最坏适应算法

#include<iostream>
using namespace std;


int FreePartition[100];//空闲分区块数组
int FirstPartition[100];//首次适应算法数组
int CycleFirstPartition[100];//循环首次适应算法数组
int BestPartition[100];//最佳适应算法数组
int WorstPartition[100];//最坏适应算法数组
int ProcessNeed[100];//每个作业的大小
int PartitionNum,ProcessNum;//分区块数,作业数


//首次适应算法
void First()
{
int i,j;
char str;
for(i=0;i<PartitionNum;i++)
{
FirstPartition[i]=FreePartition[i];
}
for(i=0;i<ProcessNum;i++)//找出第一块满足作业的分区
for(j=0;j<PartitionNum;j++)
{
if(ProcessNeed[i]>FirstPartition[j])
continue;
else
{
FirstPartition[j]-=ProcessNeed[i];//找到后把分区大小减去作业的大小
                str='A'+i;
cout<<"作业"<<str<<"在第"<<j+1<<"块分区中"<<endl;
break;
}
}
cout<<endl;
cout<<"分配之后剩余情况:"<<endl;
    for(i=0;i<PartitionNum;i++)
cout<<FirstPartition[i]<<" ";
cout<<endl<<endl;
}


//循环首次适应算法
void CycleFirst()
{
int i,j=1;
char str;
for(i=0;i<PartitionNum;i++)
{
CycleFirstPartition[i]=FreePartition[i];
}
for(i=0;i<ProcessNum;i++)
//for(j=0;j<PartitionNum;j++)
{
j=j-1;
while(j<PartitionNum)
{
if(ProcessNeed[i]>CycleFirstPartition[j])
//continue;
j++;
else
{
CycleFirstPartition[j]-=ProcessNeed[i];
str='A'+i;
cout<<"作业"<<str<<"在第"<<j+1<<"块分区中"<<endl;
break;
}
//j++;
//cout<<j<<" ";
if(j==PartitionNum && i!=ProcessNum)
{
i=-1;
}
}
}
cout<<endl;
cout<<"分配之后剩余情况:"<<endl;
for(i=0;i<PartitionNum;i++)
cout<<CycleFirstPartition[i]<<" ";
cout<<endl<<endl;


}


//最佳适应算法
void Best()
{
int i,j,k;
char str;
    for(i=0;i<PartitionNum;i++)
{
BestPartition[i]=FreePartition[i];
}
for(i=0;i<ProcessNum;i++)
{
k=0;
for(j=0;j<PartitionNum;j++)
{
//cout<<BestPartition[j]<<"   "<<ProcessNeed[i]<<endl;
if(BestPartition[j]>=ProcessNeed[i])
{
k=j;
break;
}
}
 for(int n=0;n<PartitionNum;n++)
 {
    if(BestPartition[n]<BestPartition[k] && BestPartition[n]>=ProcessNeed[i])//找最佳的
   k=n;
 }
BestPartition[k]-=ProcessNeed[i];
str='A'+i;
cout<<"作业"<<str<<"在第"<<j+1<<"块分区中"<<endl;
}
cout<<endl;
cout<<"分配之后剩余情况:"<<endl;
for(i=0;i<PartitionNum;i++)
cout<<BestPartition[i]<<" ";
cout<<endl<<endl;


}


//最坏适应算法
void Worst()
{
int i,j,k;
char str;
for(i=0;i<PartitionNum;i++)
{
WorstPartition[i]=FreePartition[i];
}
for(i=0;i<ProcessNum;i++)
{
k=0;
for(j=0;j<PartitionNum;j++)
{
if(WorstPartition[j]>WorstPartition[k])//找到最大的分区
  k=j;
}
WorstPartition[k]-=ProcessNeed[i];
str='A'+i;
cout<<"作业"<<str<<"在第"<<j+1<<"块分区中"<<endl;
}
cout<<endl;
cout<<"分配之后剩余情况:"<<endl;
for(i=0;i<PartitionNum;i++)
cout<<WorstPartition[i]<<" ";
cout<<endl<<endl;
}


int main()
{
int i;
cout<<"输入分区块数:"<<endl;
cin>>PartitionNum;
cout<<"输入每个分区的大小:"<<endl;
for(i=0;i<PartitionNum;i++)
cin>>FreePartition[i];
cout<<"输入作业数:"<<endl;
cin>>ProcessNum;
cout<<"输入每个作业的大小:"<<endl;
for(i=0;i<ProcessNum;i++)
cin>>ProcessNeed[i];
cout<<"------------首次适应算法-----------------"<<endl;
First();
cout<<"------------循环首次适应算法-------------"<<endl;
    CycleFirst();
cout<<"------------最佳适应算法-----------------"<<endl;
Best();
cout<<"------------最坏适应算法-----------------"<<endl;
Worst();
return 0;
}

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值