LRU(Least Recently Used最近最少使用)的c++实现(顺序表)

Posted 剑龙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LRU(Least Recently Used最近最少使用)的c++实现(顺序表)相关的知识,希望对你有一定的参考价值。

最近重修程序设计能力,有一句话对我的修行计划有很好的指导,能力(知识+思考+实践),三项中缺乏最多的就是实践,也是最耗时的。花了一早上写的一个简单的LRU程序

问题的抽象如下图:默认尾部为刚进入cache,头部为最近最久未使用

 

  1 //代码默认的cache有3块大小
  2 
  3 #include <iostream>
  4 
  5 using namespace std;
  6 
  7 //定义cache类,实现顺序表cache以及LRU的用到了查找,删除和插入操作
  8 class cache
  9 {
 10 public:
 11     int arr[3];
 12     int arrlen;
 13     int current;
 14 
 15     cache()
 16     {
 17         arr[0] = 0;
 18         arr[1] = 0;
 19         arr[2] = 0;
 20 
 21         arrlen = 0;
 22         current = 0;
 23     }
 24 
 25     int findNode(int value)   //查找节点
 26     {
 27         if(arrlen == 0)
 28         {
 29             cout << "cache为空" << endl;
 30             return -1;
 31         }
 32         for(int i = 0; i < 3; ++i)
 33         {
 34             if(arr[i] == value)
 35             {
 36                 current = i;
 37                 return 1;
 38             }
 39         }
 40         return 0;
 41 
 42     }
 43     void deleteNode(int position) //删除节点(current)
 44     {
 45         if(arrlen == 0)
 46         {
 47             cout << "数组空,删除无效" << endl;
 48             return ;
 49         }
 50         if(position > 2)
 51         {
 52             cout << "删除位置不合法" << endl;
 53             return ;
 54         }
 55         for(int i = position; i < position; ++i)
 56         {
 57             arr[i] = arr[i+1];
 58         }
 59         arrlen--;
 60 
 61     }
 62     void insertNode(int valuecc)  //插入节点(尾)
 63     {
 64         if(arrlen != 0)
 65         {
 66             for(int i = 2; i > 0; --i)
 67             {
 68                 arr[i] = arr[i-1];
 69             }
 70         }
 71         //bank *node= new bank;
 72         arr[0] = valuecc;
 73         arrlen = arrlen + 1;
 74     }
 75 };
 76 int main()
 77 {
 78     cache cc;
 79     int value;
 80     while(cin >> value)
 81     {
 82         if(cc.arrlen < 3)
 83         {
 84             if(cc.findNode(value) == 1)
 85             {
 86                 cc.deleteNode(cc.current);
 87                 cc.insertNode(value);
 88             }
 89             else
 90             {
 91                 cc.insertNode(value);
 92             }
 93 
 94         }
 95         else
 96         {
 97             if(cc.findNode(value) == 1)
 98             {
 99                 cc.deleteNode(cc.current);
100                 cc.insertNode(value);
101             }
102             else
103             {
104                 cc.current = 2;
105                 cc.deleteNode(cc.current);
106                 cc.insertNode(value);
107             }
108         }
109     }
110     for(int i = 0; i <= 2; i++)
111     {
112         cout << cc.arr[i] << endl;
113     }
114     return 0;
115 }

 

以上是关于LRU(Least Recently Used最近最少使用)的c++实现(顺序表)的主要内容,如果未能解决你的问题,请参考以下文章

关于LRU算法(转载)

LRU算法

转:LRU算法

LRU(leastLeast Recently Used)

LRU(leastLeast Recently Used)

LRU(leastLeast Recently Used)