這一篇是用雙向鍊錶實現lru演算法:
演算法思路:
假如我們的快取可以快取4個子塊:
快取中不存在要放入的字塊時,把子塊放在鍊錶的頭部
如果快取中存在相同子塊,則把這一字塊移到鍊錶的頭部。
快取滿了,放入新的字塊時,把尾部的字塊移除。
下面附上**:
class
lrucache
:def
__init__
(self, capacity)
: self.capacity = capacity
self.
map=
self.
list
= doublelinkedlist(self.capacity)
defget
(self, key)
:if key in self.
map:
node = self.
map[key]
self.
list
.remove(node)
self.
list
return node.value
else
:return-1
defput
(self, key, value)
:if key in self.
map:
node = self.
map.get(key)
self.
list
.remove(node)
node.value = value
self.
list
else
: node = node(key, value)
# 鍊錶快取已滿
if self.
list
.size >= self.
list
.capacity:
old_node = self.
list
.remove(
) self.
map.pop(old_node.key)
self.
list
self.
map[key]
= node
用雙向鍊錶實現記憶體置換演算法(二)
fifo first in first out 這裡使用之前實現了的雙向鍊錶來實現fifo演算法。fifo演算法還是比較好理解的,如果記憶體滿了,則最先淘汰先進入的。直接上 from doublelinkedlist import doublelinkedlist,node class fifoca...
用雙向鍊錶實現記憶體置換演算法 四
這一篇是使用雙向鍊錶實現第三個記憶體置換演算法 lfu lfu演算法分析 最不經常使用演算法,在快取滿了的時候,先淘汰使用頻率最少的,這裡我們就需要用乙個變數來記錄資料的使用頻率。但是會有乙個情況,就是使用頻率相同的時候如何去處理,這裡我是採用map來記錄,key為使用的頻率,value是雙向鍊錶,...
用java實現雙向鍊錶
判斷指定索引是否合法 param index return public boolean islinkindex int index 根據指定索引取得具體節點 param index return public node node int index return temp else return ...