使用Python的字典做一个缓存队列,写成一个class
时间: 2024-03-15 12:48:02 浏览: 74
好的,可以使用Python的字典和双向链表来实现一个缓存队列,以下是代码实现:
```python
class CacheQueue:
def __init__(self, capacity):
self.capacity = capacity
self.cache = {}
self.head = None
self.tail = None
def get(self, key):
if key not in self.cache:
return -1
node = self.cache[key]
self._move_to_head(node)
return node.val
def put(self, key, value):
if key in self.cache:
node = self.cache[key]
node.val = value
self._move_to_head(node)
else:
if len(self.cache) == self.capacity:
self._remove_tail()
node = Node(key, value)
self.cache[key] = node
self._add_to_head(node)
def _add_to_head(self, node):
if not self.head:
self.head = node
self.tail = node
else:
node.next = self.head
self.head.prev = node
self.head = node
def _remove_node(self, node):
if node == self.head:
self.head = node.next
elif node == self.tail:
self.tail = node.prev
else:
node.prev.next = node.next
node.next.prev = node.prev
def _move_to_head(self, node):
self._remove_node(node)
self._add_to_head(node)
def _remove_tail(self):
node = self.tail
del self.cache[node.key]
self._remove_node(node)
class Node:
def __init__(self, key, val):
self.key = key
self.val = val
self.prev = None
self.next = None
```
在上面的代码中,我们定义了一个CacheQueue类,它具有get和put方法来获取和存储缓存。我们使用一个字典来存储缓存,并使用双向链表来维护缓存的顺序。当我们获取或添加一个缓存时,我们将它移动到链表的头部。当我们需要删除一个缓存时,我们从链表的尾部开始删除。