先进先出FIFO页面置换算法实现
程序员文章站
2024-03-18 09:11:16
...
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class FIFO {
static int volum;//栈的容量
static List<content>list=new LinkedList<content>();
static int visit[];//要访问的页面
static int count=0;//记录页面置换的次数
public static void main(String[]args)
{
Scanner sc=new Scanner(System.in);
System.out.print("请输入栈的容量:");
volum=sc.nextInt();
System.out.println("请输入页面总数:");
int number=sc.nextInt();
visit=new int[number];
System.out.println("请输入各个页面号:");
for(int i=0;i<number;i++)
visit[i]=sc.nextInt();
sFIFO();
System.out.println("置换次数为:"+count);
}
public static void sFIFO()
{
int index=0;
while(index<visit.length)
{
boolean flag=false;
if(list.size()<=volum)
{
for(int i=0;i<list.size();i++)
{
if(list.get(i).id==visit[index])
{//若已经存在,直接返回看下一个
for(int j=0;j<list.size();j++)
{
int te=list.get(j).count;
list.get(j).setCount(te+1);
}
flag=true;
break;
}
}
if(!flag)
{
if(list.size()==volum)
{//如果满了,只能置换页面了
int old=list.get(0).count;
int temp=0;//暂存最老页面编号
//寻找最老的页面
for(int j=1;j<volum;j++)
{
if(old<(list.get(j).count))
{
temp=j;
old=list.get(j).count;
}
}
System.out.println("因为队列满,页面"+list.get(temp).id+"被置换出来");
for(int stt=0;stt<list.size();stt++)
(list.get(stt).count)++;
list.get(temp).count=1;
list.get(temp).id=visit[index];
count++;
}
else
{
for(int t=0;t<list.size();t++)
{
int te=list.get(t).count;
list.get(t).setCount(te+1);
}
content ncontent=new content(visit[index],1);
list.add(ncontent);
}
}
}
System.out.print("第"+(index+1)+"次的队列内容:");
for(int f=0;f<list.size();f++)
System.out.print(list.get(f).id+" ");
System.out.println();
index++;
}
}
}
class content
{
int id;//页面号
int count;//属于第几老的页面
public void setCount(int count)
{
this.count=count;
}
public content(int id,int count)
{
this.id=id;
this.count=count;
}
}
运行结果:
上一篇: 啦啦外卖40.0最新vue编译代码展示
下一篇: 全排列(递归算法)