代码

package package1;

import java.util.Arrays;

public class alg {
   

    //判断tar是否在nums中
    public static boolean isIn(int[] nums, int tar) {
   
        for (int n : nums) {
   
            if (tar == n) {
   
                return true;
            }
        }
        return false;
    }

    public static void fifo(int[] list){
   
        /** * list使用页列表 * 加入前三个 * 判断是否存在 * 不存在去去掉 * 存在下一个 */
        System.out.println("------------ 先进先出页面置换算法-------------------");
        int[] contain = new int[3];
        float times = 0;
        for(int i = 0; i < 3; i++){
   
            contain[i] = list[i];
        }
        for(int i = 3; i < list.length; i++){
   
            if(!isIn(contain, list[i])){
   
                times++;
                contain[0] = contain[1];
                contain[1] = contain[2];
                contain[2] = list[i];
                System.out.println("缺页中断- " + "导入:" + list[i] + " 已有:" + Arrays.toString(contain));
            }
        }
        System.out.println("次数:" + times + " 中断率:" + (times/20));
    }
    public static void lru(int[] list){
   
        System.out.println("------------ 最近最久未使用置换算法-------------------");
        int[] contain = new int[3];
        float times = 0;
        for(int i = 0; i < 3; i++){
   
            contain[i] = list[i];
        }
        for(int i = 3; i < list.length; i++){
   
            if(!isIn(contain, list[i])){
   
                times++;
                contain[0] = contain[1];
                contain[1] = contain[2];
                contain[2] = list[i];
                System.out.println("缺页中断- " + "导入:" + list[i] + " 已有:" + Arrays.toString(contain));
            }else{
   
                if(list[i] == contain[0]){
   
                    int t = contain[0];
                    contain[0] = contain[1];
                    contain[1] = contain[2];
                    contain[2] = t;
                }else if(list[i] == contain[1]){
   
                    int t = contain[1];
                    contain[1] = contain[2];
                    contain[2] = t;
                }
            }
        }
        System.out.println("次数:" + times + " 中断率:" + (times/20));
    }

    public static int optAided(int[] con,int[] list,int k){
   
        int[] a = {
   -1,-1,-1};
        for(int i = k;i < list.length; i++){
   
            int t = -1;
            for(int j = 0; j < con.length; j++){
   
                if(con[j] == list[j]){
   
                    t = j;
                    break;
                }
            }
            if(t != -1){
   
                if(a[t] == -1){
   
                    a[t] = i;
                }
            }
        }
        int t = -1;
        int r = -1;
        for(int i = 0; i < a.length; i++){
   
            if(con[i] == -1)
                continue;
            if(t == -1){
   
                t = con[i];
                r = i;
            }
            else{
   
                if(t < con[i]){
   
                    t = con[i];
                    r = i;
                }

            }
        }
        return r;
    }

    public static void opt(int[] list){
   
        /** * */
        System.out.println("------------ 最佳置换算法-------------------");
        int[] contain = new int[3];
        float times = 0;
        for(int i = 0; i < 3; i++){
   
            contain[i] = list[i];
        }
        for(int i = 3; i < list.length; i++){
   
            if(!isIn(contain, list[i])){
   
                times++;
                int t = optAided(contain, list, i);
                if(t == -1){
   
                    contain[2] = list[i];
                }else{
   
                    contain[t] = list[i];
                }
                System.out.println("缺页中断- " + "导入:" + list[i] + " 已有:" + Arrays.toString(contain));
            }
        }
        System.out.println("次数:" + times + " 中断率:" + (times/20));
    }

    public static void main(String[] args) {
   
        int[] list = {
   7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};
        System.out.println(list.length);
        fifo(list);
        lru(list);
        opt(list);
    }
}

结果