1. 程式人生 > 實用技巧 >LRU演算法list連結串列實現

LRU演算法list連結串列實現

LRU是Least Recently Used的縮寫,即最近最少使用,是一種常用的頁面置換演算法,選擇最近最久未使用的頁面予以淘汰。該演算法賦予每個頁面一個訪問欄位,用來記錄一個頁面自上次被訪問以來所經歷的時間 t,當須淘汰一個頁面時,選擇現有頁面中其 t 值最大的,即最近最少使用的頁面予以淘汰。

1存在

  存在就比較簡單了,直接取出資料,頁面資料不變,並把這個結點放在list連結串列最前面,刪除原來位置的節點

2不存在

  cache滿

  把最靠後的頁面刪除,然後把需要的頁面放到最前的位置

  cache不滿

  直接去讀取資料,然後把他放在最前的位置

#include<iostream>
#include
<list> void fun(std::list<int>&L,int x) { for(std::list<int>::iterator it=L.begin();it!=L.end();it++) { if(*it==x) { L.push_front(x); L.erase(it); return; } } std::cout<<"發生缺頁中斷 "<<x<<std::endl; L.pop_back(); L.push_front(x); }
int main() { std::list<int>L; int sum, n, i,x; sum = 0; //初始cache內沒有資料 std::cin>>n; //讀入頁數 while (true) { scanf("%d", &x); if (x < 0) { break; } else { if (sum < n) //cache未滿,放至後面 { L.push_front(x); std::cout
<<"發生缺頁中斷 "<<x<<std::endl; sum += 1; //並對cache+1 } else { fun(L,x); } } } return 0; } C++ list 因為內部就是雙向連結串列