- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
LRU算法的顺序栈实现
一、需求分析
1、本演示程序是对页面置换算法中的最近最久未使用的置换算法〔LRU〕的顺序栈的实现,并计算缺页率。
2、演示程序以用户和计算机对话的方式执行,即在计算机终端上显示“提示信息”下,用户可输入模拟缓存的大小〔即cache值〕,并输入由文件的模拟页面流,最终进行计算缺页率。
3、最后对结果做出简单分析,包括对各组数据得出的结果的简单分析和对算法的进一步改良给予解释。
二、概要设计
1、本程序中顺序栈的抽象数据类型定义:
ADTStack{
数据对象:D={a[i]|a[i]∈ElemSet,i=1,2,3,..,n,n0}
数据关系:R1={a[i-1],a[i]|a[i-1],a[i]∈D,i=1,2..n}
约定a[n]端为栈顶,a[1]端为栈底
根本操作:
InitStack(s)
操作结果:构造一个空栈
Push(s,e)
初始条件:栈s已存在
操作结果:将元素e压入栈顶
Pop(s,p)
初始条件:栈s已存在
操作结果:将栈s中指针p所指向的元素删去,〔注:p不一定指向栈底〕
}ADTStack
2、本程序包括以下几个模块
Ⅰ、栈的操作模块,包括
InitStack(s)//初始化栈操作
Push(s,e)//元素压入栈顶操作
Pop(s,p)//删除栈中元素操作
Ⅱ、主程序模块
voidmain()
{
初始化
While(页号未结束)
{
For循环查找是否在栈内
If处理页号不在栈内的情况
{
If来解决在栈未满的情况
Elseif来解决栈已满的情况
}
}
输出缺页率
}
三、详细设计
根据LRU算法的特点,进行栈的顺序实现,并在实现在c源文件中
/*------------------------------根本操作的函数原型-----------------------------*/
#defineSTACK_INIT_SIZE100//栈的初始化大小
typedefintElemType;
typedefstruct{//顺序栈的结构定义
ElemType*base;
ElemType*top;
intstacksize;//栈的大小
}SqStack;
InitStack(SqStack*s)//初始化栈
{
s-base=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType));
//if(!s-base)exit(0);
s-top=s-base;
s-stacksize=STACK_INIT_SIZE;
}
Push(SqStack*s,ElemTypee)//元素压入栈顶
{
//本算法忽略栈满追加栈元素的情况,因为不会发生
*(s-top)=e;
s-top++;
}
Pop(SqStack*s,int*p)//删除栈中某个元素,并一定为栈底
{
while(ps-top)
{
*p=*(p++);
p++;
}
s-top--;
}
四、用户手册
略
五、测试结果
新建文本文件barry.txt,内存放页号的流文件,是基于随机的页号数,如图
所示:
而当cache为12时,运行结果如下:缺页率为0.373
而当cache为24时,运行结果如下:缺页率为0.255
六、算法分析及改良
首先本算法的删除操作和传统的顺序栈的删除操作不一样,这里的删除不一定只是删除栈底的元素,可以是栈中的任意一个元素,所以对于顺序的存储数据会存在删除时教复杂的问题。也就是说本算法是基于顺序栈的数据结构实现的,所以会存在在删除栈中元素时会有时间复杂度较高的问题,由于本算法是有大量
文档评论(0)