一、實驗內容
編程實現最佳適應算法與最壞適應算法
二、實驗要求
1.任選一種高級語言實現;
三、實驗過程
1、 設計思想
最佳適應算法(BF):將所有空閑分區按照容量大小從小到大排序,在申請內存分配時,從鏈首開始查找,將滿足需求的第一個空閑分區分配給作業。
最壞適應算法(WF):將所有空閑分區按照容量大小從大到小排序,在申請內存分配時,從鏈首開始查找,將滿足需求的第一個空閑分區分配給作業。
2、 數據結構
package com.hu;
public class FreeArea {
private int address;//內存地址
private int size;//空閑區大小
public FreeArea() {
}
public FreeArea(int address, int size) {
this.address = address;
this.size = size;
}
public int getAddress() {
return address;
}
public void setAddress(int address) {
this.address = address;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
}
運行結果
四、實驗代碼
RR.H
package com.hu;
import java.util.Scanner;
public class BFWF {
static FreeArea[] freeAreas = new FreeArea[5];
public static void main(String[] args) {
System.out.println("======最佳適應算法======");
FreeArea freeArea[] = init();
SortBFArea(freeArea);
BF(freeArea);
System.out.println("=====最壞適應算法=====");
FreeArea freeArea1[] = init();
SortWFArea(freeArea1);
WF(freeArea1);
}
public static void BF(FreeArea freeArea[]) {//最佳適應算法
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入要分配的內存大小:");
int size = scanner.nextInt();
for (int i = 0; i < freeArea.length; i++) {
if (size <= freeArea[i].getSize()) {//若分配內存大小小於空閑分區大小並且空閑分區未被占用則分配成功
System.out.println("分配內存成功");
freeArea[i].setSize(freeArea[i].getSize() - size);//修改空閑區大小
SortBFArea(freeArea);//重新排序
break;
}
if (i == freeArea.length - 1 && size > freeArea[i].getSize()) System.out.println("分配失敗");
}
}
public static void WF(FreeArea freeArea[]) {//最壞適應算法
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入要分配的內存大小:");
int size = scanner.nextInt();
for (int i = 0; i < freeArea.length; i++) {
if (size <= freeArea[i].getSize()) {//若分配內存大小小於空閑分區大小並且空閑分區未被占用則分配成功
System.out.println("分配內存成功");
freeArea[i].setSize(freeArea[i].getSize() - size);//修改空閑區大小
SortWFArea(freeArea);//重新排序
break;
}
if (i == freeArea.length - 1 && size > freeArea[i].getSize()) System.out.println("分配失敗");
}
}
public static FreeArea[] init(){//空閑區初始化
System.out.println("初始化空閑區並分配內存地址與大小");
Scanner scanner = new Scanner(System.in);
for (int i=0;i<freeAreas.length;i++){
System.out.println("請輸入內存地址與大小:");
freeAreas[i] = new FreeArea(scanner.nextInt(),scanner.nextInt());
}
return freeAreas;
}
public static void SortWFArea(FreeArea freeArea[]){//空閑分區從大到小排序
FreeArea t;
for (int i = 0;i<freeAreas.length;i++){
for (int j = 0;j<freeAreas.length-1;j++){
if(freeAreas[j].getSize()<freeAreas[j+1].getSize()){
t = freeAreas[j+1];
freeAreas[j+1]=freeAreas[j];
freeAreas[j]=t;
}
}
}
}
public static void SortBFArea(FreeArea freeArea[]){//空閑分區從小到大排序
FreeArea t;
for (int i = 0;i<freeAreas.length;i++){
for (int j = 0;j<freeAreas.length-1;j++){
if(freeAreas[j].getSize()>freeAreas[j+1].getSize()){
t = freeAreas[j+1];
freeAreas[j+1]=freeAreas[j];
freeAreas[j]=t;
}
}
}
}
}