在學習很多伺服器軟體中,當記憶體不夠,而需要淘汰記憶體的時候,一般會使用lru演算法,便產生了濃厚的興趣。在學習作業系統的過程中發現lru在系統中用暫存器和棧來實現。所以我就嘗試著學習用棧來解決lru的問題。當然也參考了別人的**。
123 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 值找到其陣列位置,在做插入或則查詢操作是,將元素插入到鍊錶的表頭 當然得先刪除...