首次适应算法.docx
《首次适应算法.docx》由会员分享,可在线阅读,更多相关《首次适应算法.docx(14页珍藏版)》请在冰豆网上搜索。
首次适应算法
首次适应算法
importjava.util.Scanner;
classFreearea{
intstadd;//起始地址
intsize;//分区大小
intstate;//空闲区状态,0为空分区,1表示空闲分区
publicFreearea(intestadd,intesize,intestate){
stadd=estadd;
size=esize;
state=estate;
}
publicstaticvoidmain(String[]args){
Freeareah[]={newFreearea(20,20,1),newFreearea(80,50,1),newFreearea(300,30,0),
newFreearea(600,100,1),newFreearea(700,200,1)};
System.out.println("空闲分区表如下图所示");
System.out.println("首地址空间大小状态");
for(inti=0;i<5;i++){
System.out.println("第"+(i+1)+"块"+""+h[i].stadd+""+h[i].size+""+h[i].state);
}
System.out.println("请输入所要申请的空间大小");
Scanners=newScanner(System.in);
intapply=s.nextInt();
for(inti=0;iif(iif(h[i].state==1&&h[i].size>apply){
intt=h[i].stadd;
h[i].stadd=h[i].stadd+apply;
h[i].size=h[i].size-apply;
System.out.println("这个文件的起始地址为"+t);
System.out.println("这个文件的终止地址为"+h[i].stadd);
break;
}
elseif(h[i].state==1&&h[i].size==apply){
h[i].state=0;
intp=h[i].stadd+apply;
System.out.println("这个文件起始地址为"+h[i].stadd);
System.out.println("这个文件的终止地址为"+p);
break;
}
}
else{
if(h[i].state==1&&h[i].size>apply){
intt=h[i].stadd;
h[i].stadd=h[i].stadd+apply;
h[i].size=h[i].size-apply;
System.out.println("这个文件的起始地址为"+t);
System.out.println("这个文件的终止地址为"+h[i].stadd);
break;
}
elseif(h[i].state==1&&h[i].size==apply){
h[i].state=0;
intp=h[i].stadd+apply;
System.out.println("这个文件起始地址为"+h[i].stadd);
System.out.println("这个文件的终止地址为"+p);
break;
}
System.out.println("这个文件不能被分配");
}
}
System.out.println("请再次输入所要申请的空间大小");
Scannerm=newScanner(System.in);
intappl=m.nextInt();
for(inti=0;iif(iif(h[i].state==1&&h[i].size>appl){
intt=h[i].stadd;
h[i].stadd=h[i].stadd+appl;
h[i].size=h[i].size-appl;
System.out.println("这个文件的起始地址为"+t);
System.out.println("这个文件的终止地址为"+h[i].stadd);
break;
}
elseif(h[i].state==1&&h[i].size==appl){
h[i].state=0;
intp=h[i].stadd+appl;
System.out.println("这个文件起始地址为"+h[i].stadd);
System.out.println("这个文件的终止地址为"+p);
break;
}
}
else{
if(h[i].state==1&&h[i].size>appl){
intt=h[i].stadd;
h[i].stadd=h[i].stadd+appl;
h[i].size=h[i].size-appl;
System.out.println("这个文件的起始地址为"+t);
System.out.println("这个文件的终止地址为"+h[i].stadd);
break;
}
elseif(h[i].state==1&&h[i].size==appl){
h[i].state=0;
intp=h[i].stadd+appl;
System.out.println("这个文件起始地址为"+h[i].stadd);
System.out.println("这个文件的终止地址为"+p);
break;
}
System.out.println("这个文件不能被分配");
}
}
}
运行结果:
空闲分区表如下图所示
首地址空间大小状态
第1块20201
第2块80501
第3块300300
第4块6001001
第5块7002001
请输入所要申请的空间大小
40
这个文件的起始地址为80
这个文件的终止地址为120
请再次输入所要申请的空间大小
20
这个文件起始地址为20
这个文件的终止地址为40
循环适应算法
importjava.util.Scanner;
classFreearea{
intstadd;//起始地址
intsize;//分区大小
intstate;//空闲区状态,0为空分区,1表示空闲分区
publicFreearea(intestadd,intesize,intestate){
stadd=estadd;
size=esize;
state=estate;
}
publicstaticvoidmain(String[]args){
Freeareah[]={newFreearea(20,20,1),newFreearea(80,50,1),newFreearea(300,30,0),
newFreearea(600,100,1),newFreearea(700,200,1)};
System.out.println("空闲分区表如下图所示");
System.out.println("首地址空间大小状态");
for(inti=0;i<5;i++){
System.out.println("第"+(i+1)+"块"+""+h[i].stadd+""+h[i].size+""+h[i].state);
}
System.out.println("请输入所要申请的空间大小");
Scanners=newScanner(System.in);
intapply=s.nextInt();
inti;
for(i=0;iif(iif(h[i].state==1&&h[i].size>apply){
intt=h[i].stadd;
h[i].stadd=h[i].stadd+apply;
h[i].size=h[i].size-apply;
System.out.println("这个文件的起始地址为"+t);
System.out.println("这个文件的终止地址为"+h[i].stadd);
break;
}
elseif(h[i].state==1&&h[i].size==apply){
h[i].state=0;
intp=h[i].stadd+apply;
System.out.println("这个文件起始地址为"+h[i].stadd);
System.out.println("这个文件的终止地址为"+p);
break;
}
}
else{
if(h[i].state==1&&h[i].size>apply){
intt=h[i].stadd;
h[i].stadd=h[i].stadd+apply;
h[i].size=h[i].size-apply;
System.out.println("这个文件的起始地址为"+t);
System.out.println("这个文件的终止地址为"+h[i].stadd);
break;
}
elseif(h[i].state==1&&h[i].size==apply){
h[i].state=0;
intp=h[i].stadd+apply;
System.out.println("这个文件起始地址为"+h[i].stadd);
System.out.println("这个文件的终止地址为"+p);
break;
}
System.out.println("这个文件不能被分配");
}
}
inttag=0;
System.out.println("请再次输入所要申请的空间大小");
Scannerm=newScanner(System.in);
intappl=m.nextInt();
for(intj=i;jif(h[j].state==1&&h[j].size>appl){
intt=h[j].stadd;
h[j].stadd=h[j].stadd+appl;
h[j].size=h[j].size-appl;
System.out.println("这个文件的起始地址为"+t);
System.out.println("这个文件的终止地址为"+h[j].stadd);
tag=tag+1;
break;
}
elseif(h[j].state==1&&h[j].size==appl){
intp=h[j].stadd+appl;
System.out.println("这个文件起始地址为"+h[j].stadd);
System.out.println("这个文件的终止地址为"+p);
tag=tag+1;
break;
}
}
if(tag==0){
for(intk=0;kif(kif(h[k].state==1&&h[k].size>appl){
intt=h[k].stadd;
h[k].stadd=h[k].stadd+appl;
h[k].size=h[k].size-appl;
System.out.println("这个文件的起始地址为"+t);
System.out.println("这个文件的终止地址为"+h[k].stadd);
break;
}
elseif(h[k].state==1&&h[k].size==appl){
h[k].state=0;
intp=h[k].stadd+appl;
System.out.println("这个文件起始地址为"+h[k].stadd);
System.out.println("这个文件的终止地址为"+p);
break;
}
}
else{
if(h[k].state==1&&h[k].size>appl){
intt=h[k].stadd;
h[k].stadd=h[k].stadd+appl;
h[k].size=h[k].size-appl;
System.out.println("这个文件的起始地址为"+t);
System.out.println("这个文件的终止地址为"+h[i].stadd);
break;
}
elseif(h[k].state==1&&h[k].size==appl){
h[k].state=0;
intp=h[k].stadd+appl;
System.out.println("这个文件起始地址为"+h[k].stadd);
System.out.println("这个文件的终止地址为"+p);
break;
}
System.out.println("这个文件不能被分配");
}
}
}
}
}
空闲分区表如下图所示
首地址空间大小状态
第1块20201
第2块80501
第3块300300
第4块6001001
第5块7002001
请输入所要申请的空间大小
180
这个文件的起始地址为700
这个文件的终止地址为880
请再次输入所要申请的空间大小
30
这个文件的起始地址为80
这个文件的终止地址为110
最佳适应算法
importjava.util.Scanner;
classFreearea{
intstadd;//起始地址
intsize;//分区大小
intstate;//空闲区状态,0为空分区,1表示空闲分区
publicFreearea(intestadd,intesize,intestate){
stadd=estadd;
size=esize;
state=estate;
}
publicstaticvoidmain(String[]args){
Freeareah[]={newFreearea(20,20,1),newFreearea(80,50,1),newFreearea(300,30,0),
newFreearea(600,100,1),newFreearea(700,200,1)};
System.out.println("空闲分区表如下图所示");
System.out.println("首地址空间大小状态");
for(inti=0;i<5;i++){
System.out.println("第"+(i+1)+"块"+""+h[i].stadd+""+h[i].size+""+h[i].state);
}
System.out.println("请输入所要申请的空间大小");
Scanners=newScanner(System.in);
intapply=s.nextInt();
inta[]=newint[5];
for(inti=0;iif(h[i].state==1&&h[i].size>=apply){
a[i]=h[i].size-apply;
}
else{a[i]=10000;}
}
inti;
for(i=0;iif(a[i]<=a[0]&&a[i]<=a[1]&&a[i]<=a[2]&&a[i]<=a[3]&&a[i]<=a[4]){
System.out.println("这个申请与其差值最小为"+a[i]);
intt=h[i].stadd;
h[i].stadd=h[i].stadd+apply;
h[i].size=h[i].size-apply;
System.out.println("这个文件的起始地址为"+t);
System.out.println("这个文件的终止地址为"+h[i].stadd);
break;
}
}
System.out.println("请再次输入申请的空间大小");
Scannerm=newScanner(System.in);
intappl=m.nextInt();
for(i=0;iif(h[i].state==1&&h[i].size>=appl){
a[i]=h[i].size-appl;
}
else{a[i]=10000;}
}
for(i=0;iif(a[i]<=a[0]&&a[i]<=a[1]&&a[i]<=a[2]&&a[i]<=a[3]&&a[i]<=a[4]){
System.out.println("这个申请与其差值最小为"+a[i]);
intt=h[i].stadd;
h[i].stadd=h[i].stadd+appl;
h[i].size=h[i].size-appl;
System.out.println("这个文件的起始地址为"+t);
System.out.println("这个文件的终止地址为"+h[i].stadd);
break;
}
}
}
}
空闲分区表如下图所示
首地址空间大小状态
第1块20201
第2块80501
第3块300300
第4块6001001
第5块7002001
请输入所要申请的空间大小
180
这个申请与其差值最小为20
这个文件的起始地址为700
这个文件的终止地址为880
请再次输入申请的空间大小
20
这个申请与其差值最小为0
这个文件的起始地址为20
这个文件的终止地址为40