#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;
}
首次适应算法和最佳适应算法和循环首次适应算法和最坏适应算法
最新推荐文章于 2025-02-20 22:41:09 发布