验证中...
语言: Java
分类: 算法分析
最后更新于 2018-01-13 20:31
gistfile1.txt
原始数据 复制代码
import java.util.Scanner;
class wuli{
int vlu;
int falt;
wuli(int vlu ){
this.falt=-1;
this.vlu=vlu;
}
}
public class fifolru {
int mun; //物理块数
int yemianmun; //页面个数
fifolru(int mun,int yemianmun) {
this.mun=mun;
this.yemianmun=yemianmun;
}
public static void fifo(wuli a[],int b[] ) { //------------------------------------------fifo------------
System.out.println("+++++++++++++FIFO算法++++++++++++++++");
int mun=0;
int count=0;
for(int q=0;q<a.length;q++)
a[q]=new wuli (-2); //初始化对象
for(int q=0;q<b.length;q++) {
if(count==a.length) {
int f=0; //处理满的情况
for(int qq=0;qq<a.length;qq++) {
if(a[qq].falt==b[q]) {
System.out.println("*发现相同,不存入 ");
f=1;
break;
}
}
if(f==0) {
System.out.println("到达一个元素"+b[q]+"已经满,弹出第一个元素"+a[0].falt+" 末尾加入元素"+b[q]);
mun++;
for(int z=0;z<a.length-1;z++) { //前移
a[z].falt=a[z+1].falt;
}
a[a.length-1].falt=b[q]; //最后一个赋值
}
continue;
}
int k=0;
for(int qq=0;qq<a.length;qq++) { //处理未满情况
if(a[qq].falt==b[q]) {
System.out.println("发现相同,不存入 ");
k=1;
break;
}
}
if(k==0)
{
for(int z=0;z<a.length;z++)
if(a[z].vlu==-2) //找到没用到的物理块
{ a[z].falt=b[q]; a[z].vlu=0; mun++;count++;System.out.println("没有发现相同,存入 "); break;}
}
continue;
}
System.out.print("++++++++++结果物理块的值:"); //fifo结果
for(int a1=0;a1<a.length;a1++) {
System.out.print(a[a1].falt+" ");
}
System.out.println("++++++++++");
System.out.println("++++++++++FIFO缺页次数:"+mun+"次 +++++++++++");
}
public static void lru(wuli a[],int b[] ) { //------------------------------------------------lru
System.out.println("++++++++++LRU算法++++++++++++");
int mun=0;
int count=0;
for(int q=0;q<a.length;q++)
a[q]=new wuli (-2); //初始化对象
for(int q=0;q<b.length;q++) {
if(count==a.length) { //处理满的情况
int f=0;
for(int qq=0;qq<a.length;qq++) {
if(a[qq].falt==b[q]) {
System.out.println("*发现相同,不存入,更新位置 ");
int ji=qq;
for(int s=qq;s>0;s--)
a[s].falt=a[s-1].falt;
a[0].falt=b[q];
f=1;
break;
}
}
if(f==0) {
System.out.println("到达一个元素"+b[q]+"已经满,弹出最后一个元素"+a[a.length-1].falt+" 首部加入元素"+b[q]);
mun++;
for(int s=a.length-1;s>0;s--)
a[s].falt=a[s-1].falt;
a[0].falt=b[q];
}
continue;
}
int k=0;
for(int qq=a.length-1;qq>= 0;qq--) { //处理未满情况
if(a[qq].falt==b[q]) {
System.out.println("发现相同,不存入,更新位置 ");
int ji=qq;
while(a[ji-1].falt!=-1)
{ a[ji].falt=a[ji-1].falt ;
ji--;
}
for(int z=a.length-1;z>=0;z--)
if(a[z].vlu==-2)
a[z+1].falt=b[q];
k=1;
break;
}
}
if(k==0)
{
for(int z=a.length-1;z>=0;z--)
if(a[z].vlu==-2) //找到没用到的物理块
{ a[z].falt=b[q]; a[z].vlu=0; mun++; count++;System.out.println("没有发现相同,存入 ");
break;}
}
continue;
}
System.out.print("++++++++++结果物理块的值:"); //lru结果
for(int a1=0;a1<a.length;a1++) {
System.out.print(a[a1].falt+" ");
}
System.out.println("++++++++++");
System.out.println("++++++++++FIFO缺页次数:"+mun+"次 +++++++++++");
}
public static void main(String arg[]) {
Scanner input=new Scanner(System.in);
System.out.println("请输入分配给程序的物理块数");
int mun0=input.nextInt();
wuli wulikuai[]=new wuli[mun0]; //物理块数组
System.out.println("请输入页面流的个数");
int mun1=input.nextInt();
int yemianmun[]=new int[mun1]; //页面个数数组
fifolru text=new fifolru(mun0, mun1);
System.out.print("请顺序输入页面流");
for(int a=0;a<yemianmun.length;a++) {
int shuju = input.nextInt();
yemianmun[a]=shuju;
}
System.out.print("选择fifo算法,还是LRU算法。1——fifo,2——LRU,3——都选择");
int key=input.nextInt();
switch (key) {
case 1:
fifo(wulikuai, yemianmun);
break;
case 2:
lru(wulikuai, yemianmun);
break;
case 3:
fifo(wulikuai, yemianmun);
lru(wulikuai, yemianmun);
break;
}
}
}

评论列表( 0 )

你可以在登录后,发表评论

11_float_left_people 11_float_left_close