146 LRU快取機制 C

2021-09-24 04:53:40 字數 1149 閱讀 8962

整個程式看起來頗為複雜。

如果不考慮效率的話,可以只用乙個雙向鍊錶。

最近訪問的節點就放到隊尾。

加入新節點時,也直接放到隊尾;如果容量不夠就先把隊首節點刪掉,再把新節點加入隊尾。

但是如果考慮到效率。

每次獲取和加入節點時,都要判斷該節點是否存在(o(n))。

因此使用乙個hash表來儲存key,可以以o(1)來判斷節點是否存在。

並且hash表的value就是對應節點。

//雙向鍊錶節點

struct doublelistnode};

class

lrucache

intget

(int key)

void

put(

int key,

int value)

//如果不存在就準備新建節點,插入到隊尾

else

}private

://從鍊錶以及hash表刪去隊首節點

void

pop_front()

//將node加入到隊尾

void

push_back

(doublelistnode* node)

//將node從鍊錶移出來(不刪除)

void

kick_node

(doublelistnode* node)

int _capacity;

map<

int,doublelistnode*

> _map;

doublelistnode* _head;

doublelistnode* _tail;};

/** * your lrucache object will be instantiated and called as such:

* lrucache* obj = new lrucache(capacity);

* int param_1 = obj->get(key);

* obj->put(key,value);

*/

146 LRU快取機制

運用你所掌握的資料結構,設計和實現乙個 lru 最近最少使用 快取機制。它應該支援以下操作 獲取資料get和 寫入資料put。獲取資料get key 如果金鑰 key 存在於快取中,則獲取金鑰的值 總是正數 否則返回 1。寫入資料put key,value 如果金鑰不存在,則寫入其資料值。當快取容量...

146 LRU快取機制

運用你所掌握的資料結構,設計和實現乙個 lru 最近最少使用 快取機制。它應該支援以下操作 獲取資料get和 寫入資料put。獲取資料get key 如果金鑰 key 存在於快取中,則獲取金鑰的值 總是正數 否則返回 1。寫入資料put key,value 如果金鑰不存在,則寫入其資料值。當快取容量...

146 LRU快取機制

運用你所掌握的資料結構,設計和實現乙個 lru 最近最少使用 快取機制。它應該支援以下操作 獲取資料 get 和 寫入資料 put 獲取資料 get key 如果金鑰 key 存在於快取中,則獲取金鑰的值 總是正數 否則返回 1。寫入資料 put key,value 如果金鑰不存在,則寫入其資料值。...