fifo(first in first out)
這裡使用之前實現了的雙向鍊錶來實現fifo演算法。
fifo演算法還是比較好理解的,如果記憶體滿了,則最先淘汰先進入的。
直接上**:
from doublelinkedlist import doublelinkedlist, node
class
fifocache
:def
__init__
(self, capacity)
: self.capacity = capacity
self.size =
0 self.
map=
self.
list
= doublelinkedlist(self.capacity)
defget
(self, key)
:if key not
in self.
map:
return-1
else
: node = self.
map.get(key)
return node.value
defput(self, key, value)
:if self.capacity ==0:
return
if key in self.
map:
node = self.
map.get(key)
self.
list
.remove(node)
node.value = value
self.
list
else
:if self.size == self.capacity:
node = self.
list
.pop(
)del self.
map[node.key]
self.size -=
1 node = node(key, value)
self.
list
self.
map[key]
= node
self.size +=
1
get方法邏輯很簡單,如果快取中沒有這個key則說明資料不在快取中,直接返回-1,有的話直接根據key值返回對應的node的value值即可。
put方法就是需要注意快取滿與未滿的狀態邏輯,在快取滿的時候,除了把node給pop出來以外,還需要把map中相應的key給delete掉。
用雙向鍊錶實現記憶體置換演算法 三
這一篇是用雙向鍊錶實現lru演算法 演算法思路 假如我們的快取可以快取4個子塊 快取中不存在要放入的字塊時,把子塊放在鍊錶的頭部 如果快取中存在相同子塊,則把這一字塊移到鍊錶的頭部。快取滿了,放入新的字塊時,把尾部的字塊移除。下面附上 class lrucache def init self,cap...
用雙向鍊錶實現記憶體置換演算法 四
這一篇是使用雙向鍊錶實現第三個記憶體置換演算法 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 ...