LRU LRU是最近使用的最近最少的Least Recently Used的缩写。 在实际生活中,它被非常广泛地使用,包括所有手机的后台APP应用。
打开后台APP应用程序时,
最前面显示的一定是最近使用的,包括最新打开的或打开前的; 如果超过了后台限制,关闭最旧的程序。
也就是说,设置一个队列,有两个操作、新建和使用。
如果是新的,请将新输入的元素放在队列的开头,
使用时,从队列中检索要使用的队列的元素,并将其放在队列的开头
队列元素达到上限后,删除队列中的最后一个元素。
packagemainfuncmain { } typelrucachestruct { size int//双向链表的长度capacity int //双向链表容量chche map[int]*DLinkedNode //DLinkedNode //假最终节点}type DLinkedNode struct {//节点维护的信息keyint//keyval int//value prev * dlinkednode//节点前面的节点nnode value int ) dlinkednode ) /新节点returndlinkednode ) key:key,初始化val: value,} func构造器(capacity int ) lrucacator head 3360 initdlinkednode (0,0 )、tail : initdlinkednode (0,0 )、 0 ),l.head.next=l.taill.tail.prev=l.head.next=l.taill.taill.prev ok { LRU.move to head (k ) retururned ) ok3360=lllu ok{LRU.movetohead(k ) k.val=value } else { new node :=initdlinkednode ) key, value ) LRU.chche [ key ]=newnodelru.sizelru.addto head (new node ) } ifl ru.sizelru.capacity { LRU.remove tail } } dlinkednode ) node.next=LRU.head.next node.prev=LRU.headlru.head.next.prev=nodel ru .删除节点(node {LRU.removenode(node ) LRU.addto head (node ) }func ) LRU * lrucache (remove tail ) ) Delete ) LRU.chche,LRU.taitii