簡單實現演算法LRU

2021-08-20 11:52:08 字數 1661 閱讀 5522

lru的主要思想基本是,設定乙個固定大小的容器,不斷新增元素。

當容器放滿時,把最前面的元素清除,在對尾新增新元素,如果元素是重複的元素,則找出那個元素放到隊尾。

lru演算法主要步驟是:

1.判斷新元素的key是否在lru中,如果在,就把此元素找出來然後拿到鍊錶尾部

2.判斷元素是否填滿到指定大小,如果滿了,就清除第一條,在尾部加入新資料

package main

import (

"fmt"

)func

main()

type lrucatchnode struct

}var catchsize int

var currentsize int

var nodes *lrucatchnode

var first string

var last string

//初始化lru大小

func

lrucatch(i int)

//像lru中新增資料

func

put(key string

, value inte***ce{})

last = key

if h(key, nodes) == "" else

} else

add(key, value)

}//檢查此key是否在lru鍊錶中

func

h(key string

, node *lrucatchnode) string

if node.key == key

return h(key, node.prev)

}//像鍊錶中新增資料

func

add(key string

, value inte***ce{})

//向鍊錶中新增資料

func

w(node *lrucatchnode

, n *lrucatchnode

, key string

, value inte***ce{}) *lrucatchnode

node = nn

return node

}else

}return w(node.next, node, key, value)

}//刪除相同key的鍊錶資料

func

deletesamekey(key string

, node *lrucatchnode) *lrucatchnode

if last == key

if node.prev != nil

if node.next != nil

}return node

}return deletesamekey(key, node.prev)

}//當新key不存在於鍊錶時,刪除第一條資料

func

delete(node *lrucatchnode) *lrucatchnode

return delete(node.prev)

}//列印所有資料

func

f(node *lrucatchnode) *lrucatchnode

return f(node.prev)

}

LRU 演算法簡單實現

在學習很多伺服器軟體中,當記憶體不夠,而需要淘汰記憶體的時候,一般會使用lru演算法,便產生了濃厚的興趣。在學習作業系統的過程中發現lru在系統中用暫存器和棧來實現。所以我就嘗試著學習用棧來解決lru的問題。當然也參考了別人的 1 23 typedef struct ustack 78 void i...

LRU簡單實現

lru的設計原理就是,當資料在最近一段時間經常被訪問,那麼它在以後也會經常被訪問。這就意味著,如果經常訪問的資料,我們需要然其能夠快速命中,而不常訪問的資料,我們在容量超出限制內,要將其淘汰。主要使用linkedhashmap簡單實現lru演算法效果 public class lrucache ex...

LRU演算法實現

jdk 中的實現 在jdk 中linkedhashmap 可以作為lru 演算法以及插入順序的實現,linkedhashmap 繼承自hashmap 底層結合hash 表和雙向鍊錶,元素的插入和查詢等操作通過計算hash 值找到其陣列位置,在做插入或則查詢操作是,將元素插入到鍊錶的表頭 當然得先刪除...