LRU 演算法簡單實現

2022-05-10 04:46:47 字數 1305 閱讀 2933

在學習很多伺服器軟體中,當記憶體不夠,而需要淘汰記憶體的時候,一般會使用lru演算法,便產生了濃厚的興趣。在學習作業系統的過程中發現lru在系統中用暫存器和棧來實現。所以我就嘗試著學習用棧來解決lru的問題。當然也參考了別人的**。

1

23 typedef struct

ustack;78

void inistack(ustack *s)914

15int

isfull(ustack s)

1620

21int

notempty(ustack s)

2226

2728

int pushelm(ustack *s,int x)//

元素入棧,將x壓入s棧頂。

2934

35int deleteelm(ustack *s,int

site)

36 45

return

0; //

棧已空,刪除元素失敗。46}

4748

int isinstack(ustack s,int

x)49 //

棧是否非空,無關緊要。

5455

void stackprt(ustack s) //

列印棧的狀態。

56

mainlru.cpp

1

#define maxsize 5

2 #include3 #include"

stack.h"4

5void

main()

6

18 printf("

\n_____棧狀態_____訪問頁號__累計換頁次數\n");

1920

for(i=0;i)

23if(site!=-1)deleteelm(&mystack,site);

24 pushelm(&mystack,test[i]);

25stackprt(mystack);

26 printf("%d"

,test[i]);

27 printf("

%d\n

",count);

28}

29 }

簡單實現演算法LRU

lru的主要思想基本是,設定乙個固定大小的容器,不斷新增元素。當容器放滿時,把最前面的元素清除,在對尾新增新元素,如果元素是重複的元素,則找出那個元素放到隊尾。lru演算法主要步驟是 1.判斷新元素的key是否在lru中,如果在,就把此元素找出來然後拿到鍊錶尾部 2.判斷元素是否填滿到指定大小,如果...

LRU簡單實現

lru的設計原理就是,當資料在最近一段時間經常被訪問,那麼它在以後也會經常被訪問。這就意味著,如果經常訪問的資料,我們需要然其能夠快速命中,而不常訪問的資料,我們在容量超出限制內,要將其淘汰。主要使用linkedhashmap簡單實現lru演算法效果 public class lrucache ex...

LRU演算法實現

jdk 中的實現 在jdk 中linkedhashmap 可以作為lru 演算法以及插入順序的實現,linkedhashmap 繼承自hashmap 底層結合hash 表和雙向鍊錶,元素的插入和查詢等操作通過計算hash 值找到其陣列位置,在做插入或則查詢操作是,將元素插入到鍊錶的表頭 當然得先刪除...