严蔚敏《数据结构(c 语言版)习题集》第8章动态存储管理【荐】.pdfVIP

严蔚敏《数据结构(c 语言版)习题集》第8章动态存储管理【荐】.pdf

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

第八章 动态存储管理 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,in

文档评论(0)

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

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

1亿VIP精品文档

相关文档