先进先出置换算法(Java实现)

上课讲的一道例题,老师叫用语言将算法实现出来,这里分享下自己的思路,希望对你们有帮助,不懂可以在评论区评论,我也会为大家解答!

下面直接上代码 ^ _ ^

代码部分

import java.util.ArrayList;
import java.util.List;

public class Homework {

    private List wulikuai = new ArrayList(3);//创建一个长度为3的集合,其功能相当于有三个物理块

    private Integer count = 0;//用于统计没有缺页的数量

    /** 将访问页添加到物理块中 **/
    private List put(Integer data){
        //判断物理块里面的数据是否大于三个
        if (wulikuai.size() < 3){//物理块长度小于三时,直接向里面添加数据
            //判断当前数据是否在物理块中已经存在
            for(int i = 0;i < wulikuai.size();i++) {
                if (wulikuai.get(i) == data) { //存在的情况,当前数据存在物理块中,表示没有中断
                    System.out.print("这个没有中断----");
                    count++;//计数加1
                    return wulikuai;//直接返回原来的物理块,不做任何处理
                }
            }
            wulikuai.add(data);//不在在情况下,将形式参数的值添加到物理块集合中
        }else {//当物理块大于3时
            for(int i = 0;i < wulikuai.size();i++) {
                if (wulikuai.get(i) == data) {//存在,当前数据存在物理块中,表示没有中断
                    System.out.print("这个没有中断----");
                    count++;//计数加1
                    return wulikuai;//直接返回原来的物理块,不做任何处理
                }
            }
            wulikuai.remove(0);//将物理块集合首个元素移除
            wulikuai.add(data);//将新的添加到末尾
        }
        return wulikuai;//返回物理块
    }

    public static void main(String[] args) {
        //创建一个数组保存访问页顺序
        Integer[] data = {1,2,3,4,1,2,5,1,2,3,4,5};//上课照片例题数据集
//        Integer[] data = {1,2,1,0,4,1,3,4,2,1,4,1};//书 P109例题4-9数据集
//        Integer[] data = {1,2,3,4,1,2,5,1,2,3,4,5,6};//书 P115第10题数据集
        //将上面数组中的元素放入到物理块中
        Homework h = new Homework();
        //循环,一个一个的放入物理块中
        for(int i = 0;i < data.length;i++) {
            System.out.println(data[i]+"------>"+h.put(data[i]));//通过实参传递到上面一个方法中
        }
        System.out.println("-------------------------------");
        System.out.println("访问顺序总的次数为:"+data.length);
        System.out.println("总共有"+h.count+"次没有缺页中断");
        //所以中断次数为 :
        int zd = data.length - h.count;
        System.out.println("所以有"+zd+"次缺页中断");
    }
}


运行结果

在这里插入图片描述

以下是Java实现先进先出置换算法的代码: ```java import java.util.*; public class FIFO { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("请输入物理数:"); int M = sc.nextInt(); // 物理数 System.out.print("请输入面走向序列(用空格隔开):"); String[] input = sc.next().split(" "); // 面走向序列 int[] pages = new int[input.length]; for (int i = 0; i < input.length; i++) { pages[i] = Integer.parseInt(input[i]); } sc.close(); int[] memory = new int[M]; // 内存工作区 int[] pageFaults = new int[pages.length]; // 面失效次数 int pointer = 0; // 内存工作区指针 for (int i = 0; i < pages.length; i++) { boolean isPageFault = true; for (int j = 0; j < M; j++) { if (memory[j] == pages[i]) { // 命中 isPageFault = false; break; } } if (isPageFault) { // 未命中 memory[pointer] = pages[i]; pointer = (pointer + 1) % M; pageFaults[i] = 1; } } int pageFaultCount = 0; // 面失效次数总和 for (int i = 0; i < pageFaults.length; i++) { pageFaultCount += pageFaults[i]; } double hitRate = 1 - (double) pageFaultCount / pages.length; // 命中率 System.out.println("命中率为:" + hitRate); System.out.println("面置换过程:"); for (int i = 0; i < pages.length; i++) { System.out.print(pages[i] + " "); if (pageFaults[i] == 1) { System.out.print("F "); } else { System.out.print(" "); } for (int j = 0; j < M; j++) { System.out.print(memory[j] + " "); } System.out.println(); } } } ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值