C++模拟动态储存管理程序设计.docx

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C模拟动态储存管理程序设计

《程序设计》实习报告( 2012-5-1 ) 姓名: 秦炜杰 学号: 110520021 日期: 2011-5-1 一、实习题:编制一个模拟动态存储管理的程序。设用一个单向链表HA表示空闲链表,用一个单向链表HB表示已占用空间链表。设链表结点结构如下: 起始地址 本块单元数 链域 (“起始地址”和“本块单元数”为正整数,“链域”是指向下一结点的指针) 方案 1: 在键盘上输入起始地址和本块单元数,建立起HA,HB两链表初态(输入起始地址为0时结束); 输出HA,HB两链( 起始地址和本块单元数 ); 输入起始地址,在HB链中撤销对应结点,撤销结点后输出HB链; 将撤销结点并入HA链( 按起始地址从小到大次序加入 )并输出并入结点后的HA: 当被撤销的结点没有左邻结点、右邻结点和它相连,则在HA链加入; 当被撤销的结点有左邻结点与它相连,则把它??左邻结点合并; 当被撤销的结点有右邻结点与它相连,则把它与右邻结点合并; 当被撤销的结点有左、右邻结点相连,则把它和左、右邻结点合并; 5.继续第3点,直到HB链为空或输入的起始地址为0为止; 6.输出HA、HB链。 二、解题的基本算法: (1)根据题意,用户在键盘上输入起始地址、本块单元数,建立起HA、HB两链表(输入起始地址为0时结束;然后把HA和HB输出。输入起始地址,在HB链中撤销对应的结点后输出HB链,将撤销的结点并入HA链(按起始地址从小到大次序加入)并输出HA链。因此程序的结构如下: 1.输入起始地址和单元数。 2.分别输出HA和HB链(起始地址和单元数)。 3.输入起始地址,在HB链中撤销所对应的结点后输出HB链。 4.将撤销的结点并入HA链(起始地址从小到大次序加入)并输出HA链。 (2)根据题意,输入数据及输出链表的操作并不难,结点的撤销和加入也易于实现,关键是把结点并入后的合并情形。 (3)进一步讨论结点的合并: 插入位置是链中时:  eq \o\ac(○,1)当插入的结点没有左右邻结点时,不进行合并;  eq \o\ac(○,2))当插入的结点只有左邻结点时,则只与左邻结点合并,与左邻结点和并时, 分两种情形: 当左邻结点被合并时,则插入的结点应并在左邻结点被合并的节点处; 当左邻结点没被合并时,则插入的结点应并入左邻结点;  eq \o\ac(○,3))当插入的结点只有右邻结点时,则只与右邻结点合并,只能把右邻结点并入到插入的结点;  eq \o\ac(○,4))当插入的结点有左右邻结点时,分两种情况: 当左邻结点被合并时,则插入的结点及右邻结点应并在左邻结点被合并的节点处; 当左邻结点没被合并时,则插入的结点及右邻结点应并入左邻结点; 插入的位置在头结点之前时:  eq \o\ac(○,1)只与头邻结点合并,只能把头邻结点并入到插入的结点,改变头指针; 插入的结点在尾结点之后时:  eq \o\ac(○,1)当插入的结点只有左邻结点时,则只与左邻结点合并,与左邻结点和并时,分两种情形: 当左邻结点被合并时,则插入的结点应并在左邻结点被合并的节点处; 当左邻结点没被合并时,则插入的结点应并入左邻结点; 开始 3.程序流程图 输入HA和HB 输出HA和HB 对HA排序 输入address address在HB中 在HB中删除地址为address的结点 HA为空 在HA插入地址为address的结点 加入结点在HA首结点之前 加入结点在HA尾结点之后 有左右邻结点 头指针指向插入节点 左邻结点被合并过 插入节点并到把尾结点合并的结点处 并入尾结点 左邻结点被合并过 插入节点和右邻结点并到把左邻结点合并的结点 把插入节点和右邻结点并入左邻结点 只有右邻结点 把右邻结点并到插入节点处 只有左邻结点 左邻结点被合并过 插入节点并到把左邻结点合并的结点 把插入节点并入左邻结点 输入address 有右邻结点 首结点并到插入节点 改变头指针,不合并 HB为空或address为0 结 束 4.源程序代码。 #includeiostream.h #includeprocess.h #includeconio.h struct Occasion //定义结构体 { int date1; // 起始地址 int date2; // 本块单元数 Occasion* link; // 指向下一个结点 }; Occasion *Push(Occasion *h,int obj

文档评论(0)

2017ll + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档