骡子骑马找骆驼 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 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料