- 雙向鏈表定義: “雙向鏈表”相對(duì)于“單向鏈表”是一種更復(fù)雜的鏈表。原因在于, 雙向鏈表的每個(gè)節(jié)點(diǎn)有兩個(gè)鏈接地址:
- next:指向下一個(gè)節(jié)點(diǎn),當(dāng)此節(jié)點(diǎn)為 節(jié)點(diǎn)時(shí),指向空值;
- pre: 指向前一個(gè)節(jié)點(diǎn),當(dāng)此節(jié)點(diǎn)為 節(jié)點(diǎn)時(shí),指向空值
class LRUCache(object):
def __init__(self, capacity):
# cache 的最大記錄數(shù)
self.maxsize = capacity
# 用于真實(shí)的存儲(chǔ)數(shù)據(jù)
self.inner_dd = {}
# 鏈表-頭指針
self.head = None
# 鏈表-尾指針
self.tail = None
def put(self, key, value):
# 達(dá)到指定大小
if len(self.inner_dd) >= self.maxsize:
self.remove_head_node()
node = Node()
node.data = (key, value)
self.insert_to_tail(node)
self.inner_dd[key] = node
def insert_to_tail(self, node):
if self.tail is None:
self.tail = node
self.head = node
else:
self.tail.next = node
node.pre = self.tail
self.tail = node
def remove_head_node(self):
node = self.head
del self.inner_dd[node.data[0]]
node = None
self.head = self.head.next
self.head.pre = None
def get(self, key):
if key in self.inner_dd:
# 如果命中, 需要將對(duì)應(yīng)的節(jié)點(diǎn)移動(dòng)到隊(duì)列的尾部
node = self.inner_dd.get(key)
self.move_to_tail(node)
return node.data[1]
return None
def move_to_tail(self, node):
# 只需處理在隊(duì)列頭部和中間的情況
if not (node == self.tail):
if node == self.head:
self.head = node.next
self.head.pre = None
self.tail.next = node
node.pre = self.tail
node.next = None
self.tail = node
else:
pre_node = node.pre
next_node = node.next
pre_node.next = next_node
next_node.pre = pre_node
self.tail.next = node
node.pre = self.tail
node.next = None
self.tail = node
class Node(object):
def __init__(self):
self.pre = None
self.next = None
# (key, value)
self.data = None
def __eq__(self, other):
if self.data[0] == other.data[0]:
return True
return False
def __str__(self):
return str(self.data)
if __name__ == '__main__':
obj = LRUCache(10)
param_1 = obj.get(key)
obj.put(key, value)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。