严蔚敏《数据结构(c 语言版)习题集》第8章动态存储管理.pdf_第1页
严蔚敏《数据结构(c 语言版)习题集》第8章动态存储管理.pdf_第2页
严蔚敏《数据结构(c 语言版)习题集》第8章动态存储管理.pdf_第3页
严蔚敏《数据结构(c 语言版)习题集》第8章动态存储管理.pdf_第4页
严蔚敏《数据结构(c 语言版)习题集》第8章动态存储管理.pdf_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第八章 动态存储管理 8 11 typedef struct char start int size fmblock 空闲块类型 char Malloc Fdlf int n 遵循最后分配者最先释放规则的内存分配算法 while Gettop 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 f p n 1 f 指向空闲块底部 if p 1 tagf 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 q size n f uplink q f tag 0 else if p 1 tag 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 求回收块的伙伴地址 addr tag 0 addr kval n for i 0 avail i nodesizellink addr addr rlink addr avail i first addr 作为唯一一个该大小的空闲块 else for p avail i first p buddyp p rlink 寻找伙伴 if p buddy 伙伴为空闲块 此时进行合并 if p rlink p avail i first NULL 伙伴是此大小的唯一空闲块 else p llink rlink p rlink p rlink llink p llink 从空闲块链中删去伙伴 new addr p p addr 合并后的新块首址 Free BS avail new 2 n 递归地回收新块 if else 伙伴为占用块 此时插入空闲块链头部 q p rlink p rlink addr addr llink p q llink addr addr rlink q else Free BS 8 15 FBList MakeList char highbound char lowbound 把堆结构存储的的所有空闲 块链接成可利用空间表 并返回表头指针 p lowbound while p tag 没有空闲块 head p for q p ptag q next p q p if p next NULL return head 返回头指针 MakeList 8 16 void Mem Contract Heap j 0 for i 0 itag s H list i length p H list i stadr for k 0 k s k q p 紧缩内存空间 H list j stadr q H list j length s 紧缩占用空间表 j Mem Contract 8 1 画出 1 个顶点 2 个顶点 3 个顶点 4 个顶点和 5 个顶点的无向完全图 试证明 在 n 个顶点的无向完全图中 边的条数为 n n 1 2 8 2 右边的有向图是强连通的吗 请列出所有的简单路径 8 3 给出右图的邻接矩阵 邻接表和邻接多重表表示 8 4 用邻接矩阵表示图时 若图中有 1000 个顶点 1000 条边 则形成的邻接矩阵有多少矩阵元素 有多少非零元素 是否 稀疏矩阵 解答 一个图中有 1000 个顶点 其邻接矩阵中的矩阵元素有 10002 1000000 个 它有 1000 个非零元素 对于有向图 或 2000 个非零元素 对于无向图 因此是稀疏矩阵 8 5 用邻接矩阵表示图时 矩阵元素的个数与顶点个数是否相关 与边的条数是否相关 解答 用邻接矩阵表示图 矩阵元素的个数是顶点个数的平方 与边的条数无关 矩阵中 非零元素的个数与边的条数有关 8 6 有 n 个顶点的无向连通图至少有多少条边 有 n 个顶点的有向强连通图至少有多少条 边 试举例说明 解答 n 个顶点的无向连通图至少有 n 1 条边 n 个顶点的有向强连通图至少有 n 条边 例如 8 7 对于有 n 个顶点的无向图 采用邻接矩阵表示 如何判断以下问题 图中有多少条边 任意两个顶点 i 和 j 之间是否有边相连 任意一个顶点的度是多少 解答 用邻接矩阵表示无向图时 因为是对称矩阵 对矩阵的上三角部分或下三角部分检 测一遍 统计其中的非零元素个数 就是图中的边数 如果邻接矩阵中 A i j 不为零 说 明顶点 i 与顶点 j 之间有边相连 此外统计矩阵第 i 行或第 i 列的非零元素个数 就可得到 顶点 i 的度数 8 8 对于如右图所示的有向图 试写出 1 从顶点 出发进行深度优先搜索所得到的 深度优先生成树 2 从顶点 出发进行广度优先搜索所得到的 广度优先生成树 8 9 试扩充深度优先搜索算法 在遍历图的过程中建立生成森林的左子女 右兄弟链表 算 法的首部为 viod Graph DFS const int v int visited TreeNode t 其中 指针 t 指向生成森林上具有图顶点 v 信息的根结点 提示 在继续按深度方向从根 v 的某一未访 问过的邻接顶点 w 向下遍历之前 建立子女结点 但需要判断是作为根的第一个子女还是 作为其子女的右兄弟链入生成树 8 10 用邻接表表示图时 顶点个数设为 n 边的条数设为 e 在邻接表上执行有关图的遍历 操作时 时间代价是 O n e 还是 O n e 或者是 O max n e 解答 在邻接表上执行图的遍历操作时 需要对邻接表中所有的边链表中的结点访问一次 还需要对所有的顶点访问一次 所以时间代价是 O n e 8 15 右图是一个连通图 请画出 1 以顶点 为根的深度优先生成树 2 如果有关节点 请找出所有的关节 点 3 如果想把该连通图变成重连通图 至少在图中加几条边 如何加 解答 1 从顶点 出发的深度优先生成树为 此答案不唯一 2 8 16 试证明在一个有 n 个顶点的完全图中 生成树 的数目至少有 2n 1 1 8 17 编写一个完整的程序 首先定义堆和并查集的 结构类型和相关操作 再定义 Kruskal 求连通网络 的最小生成树算法的实现 并以右图为例 写出求 解过程中堆 并查集和最小生成树的变化 8 18 利用 Dijkstra 算法的思想 设计一个求最小生成树的算法 8 19 以右图为例 按 Dijkstra 算法计算得到的从顶点 到其它各个顶点的最短路径和最短路径长度 8 20 在以下假设下 重写 Dijkstra 算法 1 用邻接表表示带权有向图 G 其中每个边结点有 3 个域 邻接顶点 vertex 边上的 权值 length 和边链表的链接指针 link 2 用集合 T V G S 代替 S 已找到最短路径的顶点集合 利用链表来表示集合 T 试比较新算法与原来的算法 计算时间是快了还是慢了 给出定量的比较 8 22 使用 Floyd 算法计算 8 19 题所用的带权有向图的各对顶点之间的最短路径 8 23 下面是基于元素 0 到 4 的一些优先关系的集合 试问它们是否定义了一个偏序关系 为什么 0 1 1 3 1 2 2 3 2 4 4 0 8 24 试证明 对于一个无向图 G V E 若 G 中各顶点的度均大于或等于 2 则 G 中必有 回路 解答 反证法 对于一个无向图 G V E 若 G 中各顶点的度均大于或等于 2 则 G 中没有回路 此时从某一个顶点出发 应能按拓扑有序的顺序遍历图中所有顶点 但当遍历 到该顶点的另一邻接顶点时 又可能回到该顶点 没有回路的假设不成立 8 25 设有一个有向图存储在邻接表中 试设计一个 算法 按深度优先搜索策略对其进行拓扑排序 并 以右图为例检验你的算法的正确性 解答 1 定义邻接表结构 const n 顶点个数 type pointer node node record adj integer 邻接顶点号 cost real 边上的权值 link pointer end vex record ind integer 顶点入度 fout pointer 出边表头指针 end nodelist array 1 n of vex 邻接表 另设一个辅助数组 记录访问顺序 visited array 1 n of integer 初始时 各结点的 visited i 均为 0 还有一个访问计数 count 初始时为 0 2 拓扑排序算法 procedure dfs G nodelist v integer var w integer p pointer begin count count 1 visited v count p G v fout while p nil do begin w p adj G w ind G w ind 1 if visited w 0 and G w ind 0 then dfs G w p p link end end 主程序 for i 1 to n do visited i 0 count 0 read i j w while i 0 and j 0 do begin new p p adj j p cost w G j ind G j ind 1 p link G i fout G i fout p read i j w end for i 1 to n do if visited i 0 and G i ind 0 then dfs G i if count n then write 排序失败 8 26 试对右图所示的 AOE 网络 1 这个工程最早可能在什么时 间结束 2 求每个活动的最早开始时间 e 和最迟开始时间 l 3 确定哪些活动是关键活动 解答 按拓扑有序的顺序计算各个顶点的最早可能开始时间 Ve 和最迟允许开始时间 Vl 然后再计算各个活动的最早可能开始时间 e 和最迟允许开始时间 l 根据 l e 0 来确定关 键活动 从而确定关键路径 1 2 3 4 5 6 Ve 0 19 15 29 38 43 Vl 0 19 15 37 38 43 e 0 0 15 19 19 15 29 38 l 17 0 15 27 19 2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论