Skip to content

Commit dbfa04d

Browse files
authored
Initial File
LRU Cache Implementations
1 parent de04f36 commit dbfa04d

1 file changed

Lines changed: 62 additions & 0 deletions

File tree

lru_cache.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
class Node:
2+
def __init__(self, k, v):
3+
self.key = k
4+
self.value = v
5+
self.next = None
6+
self.prev = None
7+
8+
9+
class LRU_cache:
10+
def __init__(self, capacity):
11+
self.capacity = capacity
12+
self.dic = dict()
13+
14+
self.head = Node(0, 0)
15+
self.tail = Node(0, 0)
16+
self.head.next = self.tail
17+
self.tail.prev = self.head
18+
19+
20+
21+
def _add(self, node):
22+
p = self.tail.prev
23+
p.next = node
24+
self.tail.prev = node
25+
node.next = self.tail
26+
node.prev = p
27+
28+
29+
def _remove(self, node):
30+
p = node.prev
31+
n = node.next
32+
p.next = n
33+
n.prev = p
34+
35+
36+
37+
def get(self, key):
38+
if key in self.dic:
39+
n = self.dic[key]
40+
self._remove(n)
41+
self._add(n)
42+
return n.value
43+
return -1
44+
45+
def set(self, key, value):
46+
n = Node(key, value)
47+
self._add(n)
48+
self.dic[key] = n
49+
if len(self.dic) > self.capacity:
50+
n = self.head.next
51+
self._remove(n)
52+
del self.dic[n.key]
53+
54+
55+
cache = LRU_cache(3)
56+
57+
cache.set('a', 'apple')
58+
cache.set('b', 'ball')
59+
cache.set('c', 'cat')
60+
cache.set('d', 'dog')
61+
print(cache.get('a'))
62+
print(cache.get('c'))

0 commit comments

Comments
 (0)