网站大量收购独家精品文档,联系QQ:2885784924

《数据结构题集》答案第8章动态存储管理.docVIP

《数据结构题集》答案第8章动态存储管理.doc

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《数据结构题集》答案第8章动态存储管理

第八章 动态存储管理 8.11 typedef struct { ?????????? ?????? char *start; ???????????????? int size; ????????????? } fmblock; //空闲块类型 char *Malloc_Fdlf(int n)//遵循最后分配者最先释放规则的内存分配算法 { ??while(Gettop(S,b)b.sizen) ??{ ????Pop(S,b); ????Push(T,b); //从栈顶逐个取出空闲块进行比较 ??} ??if(StackEmpty(S)) return NULL; //没有大小足够的空闲块 ??Pop(S,b); ??b.size-=n; ??if(b.size) Push(S,{b.start+n,b.size});//分割空闲块 ??while(!StackEmpty(T)) ??{ ????Pop(T,a); ????Push(S,a); ??} //恢复原来次序 ??return b.start; }//Malloc_Fdlf mem_init()//初始化过程 { ??... ??InitStack(S);InitStack(T); //S和T的元素都是fmblock类型 ??Push(S,{MemStart,MemLen}); //一开始,栈中只有一个内存整块 ??... }//main 8.12 void Free_Fdlf(char *addr,int n)//与上一题对应的释放算法 { ??while(Gettop(S,b)b.startaddr) ??{ ????Pop(S,b); ????Push(T,b); ??} //在按地址排序的栈中找到合适的插入位置 ??if(Gettop(T,b)(b.start+b.size==addr)) //可以与上邻块合并 ??{ ????Pop(T,b); ????addr=b.start;n+=b.size; ??} ??if(Gettop(S,b)(addr+n==b.start)) //可以与下邻块合并 ??{ ????Pop(S,b); ????n+=b.size; ??} ??Push(S,{addr,n}); //插入到空闲块栈中 ??while(!StackEmpty(T)) ??{ ????Pop(T,b); ????Push(S,b); ??} //恢复原来次序 }//Free_Fdlf 8.13 void Free_BT(Space pav,Space p)//在边界标识法的动态存储管理系统中回收空闲块p { ??n=p-size; ??f=p+n-1; //f指向空闲块底部 ??if((p-1)-tag(f+1)-tag) //回收块上下邻块均为占用块 ??{ ????p-tag=0;f-tag=0; ????f-uplink=p; ????if(!pav) ????{ ??????p-llink=p; ??????p-rlink=p; ????} ????else ????{ ??????q=pav-llink; ??????p-llink=q;p-rlink=pav; ??????q-rlink=p;pav-llink=p; ????} ????pav=p; ??}//if ??else if(!(p-1)-tag(f+1)-tag) //上邻块为空闲块 ??{ ????q=(p-1)-uplink; ????q-size+=n; ????f-uplink=q; ????f-tag=0; ??} ??else if((p-1)-tag!(f+1)-tag) //下邻块为空闲块 ??{ ????q=f+1; ????s=q-llink;t=q-rlink; ????p-llink=s;p-rlink=t; ????s-rlink=p;t-llink=p; ????p-size+=q-size; ????(q+q-size-1)-uplink=p; ????p-tag=0; ??} ??else //上下邻块均为空闲块 ??{ ????s=(p-1)-uplink; ????t=f+1; ????s-size+=n+t-size; ????t-llink-rlink=t-rlink; ????t-rlink-llink=t-llink; ????(t+t-size-1)-uplink=s; ??} }//Free_BT,该算法在课本里有详细的描述. 8.14 void Free_BS(freelist avail,char *addr,int n)//伙伴系统的空闲块回收算法 { ??buddy=ad

文档评论(0)

asd522513656 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档