骡子骑马找骆驼 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 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 路易威登官网 里边的参数逆向
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程