LRU的C++的简单实现

class LRUCache提供两个接口:get(int key)和set(int key,value)

#include<iostream>

using namespace std;



class LRUCache{
public:
    LRUCache(int cap):current(0),capacity(cap){
        A=new node[cap];
    }
    int get(int key) {
        for(int i=0;i<current;i++)
        {
        	if(key==A[i].key)
        	{
        		int temp=A[i].value;
        		node tt=A[i];
        		for(int k=i;k<current-1;k++)
        		{
        			A[k]=A[k+1];
        		}
        		A[current-1]=tt;
        		return temp;
        	}
        }
        return -1;
    }
  void set(int key, int value) {
    	    node t;
        	t.key=key;
        	t.value=value;
        	bool has=false;
        for(int i=0;i<current;i++)
        {
        	if(key==A[i].key)
        	{
			  A[i].value=value;
			  node tt=A[i];
			  for(int k=i;k<current-1;k++)
        		{
        			A[k]=A[k+1];
        		}
        		A[current-1]=tt;
        		has=true;
        		break;
			}
        }
        if(!has)
        {
       
        if(current<capacity)
        {
        	A[current++]=t;
        }else{
        	for(int k=0;k<current-1;k++)
        		{
        			A[k]=A[k+1];
        		}
        		A[current-1]=t;
        }
         }
        print();
    }
    void print()
    {
    	for(int i=0;i<current;i++)
    	cout<<A[i].key<<" ";
        cout<<endl;
    }
private:
    int current;
    int capacity;
    struct node{
	int key;
	int value;
    };
    void swap(node &a,node &b)
    {
	node temp;
	temp=a;
	a=b;
	b=temp;
   }
   node *A;
};
int main()
{
	LRUCache lru(4);
	
	lru.set(2,1);
	lru.set(2,2);
	lru.set(3,2);
	lru.set(4,2);
	lru.set(5,2);
	lru.set(1,2);
	lru.set(4,2);
	lru.set(3,2);
	lru.set(4,2);
	lru.get(1);
	lru.print();
	
}

测试:


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值