import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class LRU {
static int volum;// 栈的容量
static Listlist=new LinkedList();
//链表用来模拟栈存放页面
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.print("请输入总页面数目:");
int n=sc.nextInt();
visit=new int[n];
System.out.println("请输入各个页的页面号码:");
for(int i=0;i
visit[i]=sc.nextInt();
sLRU();//调用最近最久未使用
System.out.println("置换页面的数目为:"+count);
}
public static void sLRU()
{
int index=0;
while(index
{
boolean flag=false;
if(list.size()<=volum)
{
for(int i=0;i
{
if((int)(list.get(i))==visit[index])
{
list.remove(i);//先删除
list.add(visit[index]);//再添加到尾部
flag=true;
break;
}
}
if(!flag)
{
if(list.size()
{//如果栈未满,而且此页面没有在栈中,就将它入栈
list.add(visit[index]);
}
else
{//如果栈已经满了,且该页面号码没有在栈中,就把栈底元素删除,将新页插入
int temp=list.get(0);
list.remove(0);//最开始一个换出
list.add(visit[index]);//加到末尾
count++;
System.out.println("开始换页了,将栈底的"+temp+"换出");
System.out.println("这也是没有办法的事情,毕竟栈是有限的");
}
}
System.out.print("经过第"+(index+1)+"个页面的栈内容为");
for(int k=0;k
System.out.print(list.get(k)+" ");
System.out.println();
index++;
}
}
}
}