**
课程设计的选题有没有大佬帮一帮小萌新,初学者啥都闹不懂
**
伙伴存储管理系统演示
【问题描述】伙伴存储管理系统是一种巧妙而有效的方法。试写一个演示系统,演示分配和回收存储块前后的存储空间状态变化。
【基本要求】程序应不断地从终端读取整数n。每个整数是一个请求。如果n>0,则表示用户申请大小为n的空间:如果n<0,则表示归还起始地址(即下标)为-n的块才日果n=0,则表示结束运行。每读入一个数,就处理相应的请求,并显示处理之后的系统状态。系统状态由占用表和空闲表构成。显示系统状态意味着显示占用表中各块的始址和长度,以及空闲表中各种大小的空闲块的始址和长度。
【测试数据】l,一<①1>,3,4,4,4,一<①4>,一<①3>,2,2,2,2,一<②4>,一<①2>,一<②2>,一<③2>,一<④2>,一<③4>,40,0。其中,<③,2>表示第③次申请大小为2的空间使得块的始址。其余类推。
【实现提示】可以取m=5,即Spacesize=25,数据结构如下:Typedef struct BlkHeader{BlkHeader *llink,*rlink;int tag;Int kvalue;Int blkstart; //块起始地址}BlkHeader,*Link;Typedef struct{ Int blksize; Link first;}ListHeader;Typedef char ell; //cell也可以是其他单位主要变量是: cell space[Spacesize] //被管理的空间 ListHeader avail[m+1]; //可用空间表 Link ailocated;.//占用表的表头指针在这里,我们把每块的块头分离出来,通过blkstart域与相应的块建立联系。每个块一旦被分配,其块头就进入占用表,其中的各块头由rlink域链接在一起。tag域实际上不起作用,但为了与实际伙伴管理系统更接近,没有把它去掉。显然,在这种模拟实现方法中,不对数组space作任何引用或赋值。
【选作内容】(1)同时还用直观的图示方式显示状态。(2)写一个随机地申请和归还各种规格的存储块的函数考验你的伙伴系统。