You are viewing a single comment's thread. Return to all comments →
class LRUCache : public Cache { public: LRUCache(int capacity) { cp = capacity; head = tail = NULL; } void delete_node(Node* del) { if (head == NULL || del == NULL) return; if (del == head) head = del->next; if (del->next != NULL) del->next->prev = del->prev; if (del->prev != NULL) del->prev->next = del->next; mp.erase(del->key); delete(del); } void insert_node(int k, int v) { Node *n = new Node(NULL, head, k, v); if (head != NULL) head->prev = n; head = mp[k] = n; } int sort_list(int k) { Node *temp = head; while (temp->key != k) temp = temp->next; int del_v = temp->value; delete_node(temp); return del_v; } void set(int k, int v) override { if (head == NULL) { Node *n = new Node(k, v); head = tail = mp[k] = n; return; } if (mp.count(k)) sort_list(k); insert_node(k, v); if (mp.size() > cp) delete_node(tail); } int get(int k) override { if (!mp.count(k)) return -1; if (head != mp[k]) insert_node(k, sort_list(k)); return mp[k]->value; } };
Seems like cookies are disabled on this browser, please enable them to open this website
Abstract Classes - Polymorphism
You are viewing a single comment's thread. Return to all comments →