骡子骑马找骆驼 2017-06-19 02:40 采纳率: 25%
浏览 2438
已采纳

java语言编写fifo或者LRU的页面置换算法(最好有标注) 不要百度的代码

求大神帮忙用java写一个fifo或者LRU的页面置换算法
求大神帮忙用java写一个fifo或者LRU的页面置换算法
求大神帮忙用java写一个fifo或者LRU的页面置换算法

  • 写回答

2条回答

  • 话说起个名字好难 2017-06-19 03:30
    关注

    之前写过一个LRU的算法,不知道符不符合你的需求
    /**

    • 用双向链表实现LRU算法
    • @author liuxin
      *
      */
      public class LRUPageFrame {

      private static class Node {

      Node prev;
      Node next;
      int pageNum;
      
      Node() {
      }
      

      }
      /**

      • LRU算法: */ private int capacity; private int size;

      private Node first;// 链表头
      private Node last;// 链表尾

      public LRUPageFrame(int capacity) {

      this.capacity = capacity;
      

      }

      /**

      • 获取缓存中对象
      • @param key
      • @return / public void access(int pageNum) { Node node = checkExist(pageNum); //如果这个页面在缓存中存在 if (node != null) { // 将当前节点移动至第一个 moveTofirst(node); } else { //不存在后比较当前是否已经满队列了 if (size < capacity) { //如果还有空闲队列 // 添加一个节点在栈顶 final Node n = first; final Node firstNode = new Node(); firstNode.next = n; firstNode.pageNum = pageNum; firstNode.prev = null; this.first = firstNode; if (n == null) { last = firstNode; } else { n.prev = firstNode; } size++; } else { //否则,添加一个节点在栈顶,栈底的节点移除 addNode(pageNum); } } } //如果超出了缓存范围,则添加到栈顶,栈底的节点移除 private void addNode(int pageNum) { Node node = new Node(); node.pageNum = pageNum; node.next = first; first.prev = node; first = node; last = last.prev; last.next = null; } /*
      • 如果在队列中存在,则移动至首位
      • @param node
        */
        private void moveTofirst(Node node) {
        if(node==first){
        return;
        }
        if(node==last){
        first.prev = node;
        node.next = first;
        first = node;
        last = node.prev;
        last.next = null;
        first.prev = null;

        }else{
        node.prev.next = node.next;
        node.next.prev = node.prev;
        node.prev = null;
        node.next = first;
        first.prev = node;
        first = node;
        }

      }

      /**

      • 检查是否在队列中存在页数
      • @param pageNum
      • @return */ private Node checkExist(int pageNum) { Node node = first; for(int i=0;i<size;i++){ if(pageNum==node.pageNum){ return node; } node=node.next; } return null; }

      public String toString() {
      StringBuilder buffer = new StringBuilder();
      Node node = first;
      while (node != null) {
      buffer.append(node.pageNum);

          node = node.next;
          if (node != null) {
              buffer.append(",");
          }
      }
      return buffer.toString();
      

      }

    }

    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?
  • ¥40 串口调试助手打开串口后,keil5的代码就停止了
  • ¥15 电脑最近经常蓝屏,求大家看看哪的问题
  • ¥60 高价有偿求java辅导。工程量较大,价格你定,联系确定辅导后将采纳你的答案。希望能给出完整详细代码,并能解释回答我关于代码的疑问疑问,代码要求如下,联系我会发文档