LRU缓存淘汰算法(链表)

LRU(Least recently used)最近最少使用策略算法:

是根据数据的历史访问记录(按时间排序)来进行淘汰数据的,理念:如果一个数据在最近没有被访问过,那么将来被访问的可能性也很小,当缓存空间已满的时候,如果有新的缓存数据进来,将会删除时间最早的那条数据;

1.一个空的缓存链表长度为5,依次进入
E => D => C => B => A
2.当ABCDE这5个节点中任何一个需要添加到缓存链表中,先查找链表中有没有这个值,如果存在,将该节点删除,并重新添加到表头;
B => E => D => C => A
3.链表中插入新一个数据,先遍历原先的数据,是否存在,不不存在将删除最后一个节点,并将最新的节点放在链表的表头;
A => E => D => C => B

 public static void LRU()
        {
            //假设链表的长度为3
            LinkedList l = new LinkedList();
            l.Insert(1);
            l.Insert(2);
            l.Insert(3);

            bool isExist = false;

            Node newNode = new Node(4);
            Node temp = l.Head;

            int i = 1;
            if (newNode.Data != temp.Data)
            {
                while (temp.Next != null)
                {
                    i++;
                    temp = temp.Next;
                    if (temp.Data == newNode.Data)//链表中存在数据
                    {
                        l.Delete(i);
                        l.Insert(newNode.Data,1);//插入到第一个位置
                        break;
                    }
                }

                if (!isExist)
                {
                    l.Delete(i);//i = 链表长度 删除最先进入链表的数据
                    l.Insert(newNode.Data, 1);//插入到第一个位置
                }
            }
        }

你可能感兴趣的:(LRU缓存淘汰算法(链表))