2014年《数据结构与算法(C++语言版)》第5章 多维数组与广义表.pptVIP

2014年《数据结构与算法(C++语言版)》第5章 多维数组与广义表.ppt

  1. 1、本文档共94页,可阅读全部内容。
  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文档。上传文档
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 十 字 链 表 十 字 链 表 3. 删除操作 与插入操作类似,如果将十字链表仅仅作为稀疏矩阵,则删除操作也属于内部操作,它将行号和列号已知的结点从十字链表中删除。因为每个结点同时属于两个链表(行链表与列链表),所以删除一个结点时,应分别从这两个链表中删除。Get类和Set类请读者自行实现。 十 字 链 表 十字链表相加法* 设有两个按十字链表存储的矩阵Am×n和Bm×n,现考虑将B加到A上,即相加操作A←A+B,也就是对应元素相加ai, j+bi, j。下面考虑采用逐行相加的方法,即逐次将B的各行加到A上,实现过程可描述为(伪码): 十 字 链 表 该项操作的实现与多项式加法十分类似,见以下程序。 十 字 链 表 十 字 链 表 在上列算法描述中,尚有一些操作需细化,下面分别进行讨论。 从pB复制一结点p: 将p插入到A的第i行链表中pA之前(pA0之后) 十 字 链 表 将p插入到A的pB-col列链表适当位置: 例5-5 读入一个矩阵并建立它的十字链表示,使用一个辅助的全程量数组hdnode。 算法如下: 十 字 链 表 十 字 链 表 广 义 表 广义表的定义 广义表(List,又称列表)是线性表的推广,它放松了对表元素的原子限制,允许表元素具有其自身结构。广义表是n (n≥0)个元素a1, a2, …, ai, …, an的有限序列,ai或者是一个原子,或者是一个广义表。广义表通常记作LS = (a1, a2,…, ai,…, an),其中,LS是广义表的名字,n为它的长度,如果ai也是广义表,则称它为LS的子表。广义表通常用圆括号括起来,用逗号分隔其中的元素;为了区分原子和广义表,书写时用大写字母表示广义表,用小写字母表示原子;若广义表LS非空 (n≥1),则a1是LS的表头,其余元素组成的表(a2,…, an)称为LS的表尾;广义表是递归定义的。 例5-6 ① L1 = ( )表示:L1是一个空表,它的长度为0,深度为1。 ② L2 = (?)表示:列表B只有一个原子?,L2的长度为1,深度也为1。 ③ L3 = (?, (?, ?, ?))表示:列表L3的长度为2,深度为2,两个元素分别为原子?和子表(?, ?, ?)。 ④ LS = (L1, L2, L3)表示:列表LS的长度为3,深度为1,3个元素都是列表。将子表的值带入后,则有LS =(( ), (?), (?, (?, ?, ?)))。 ⑤ L4 = (?, L4)表示:这是一个递归的表,它的长度为2,深度为∞。L4相当于一个无限的列表L4 = (?, (?, (?,…)))。 广 义 表 广义表的抽象数据类型定义 广义表的抽象数据类型定义见以下ADT: 广 义 表 广 义 表 广义表有如下重要结论:? ① 列表的元素可以是子表,而子表的元素还可以是子表,故列表是一个多层次的结构。如图所示的列表LS,图中圆圈表示列表,方块表示原子。 ② 列表可为其他列表所共享。 ③ 列表可以是一个递归的表,即列表也可以是其本身的一个子表。 广 义 表 广义表的存储结构 1. 头尾链表存储表示 (1)结点结构 其中tag是标志域,tag=1表示表结点,tag=0表示原子结点;hp指示表头的指针域;tp指示表尾的指针域;data是值域。 广 义 表 (2)存储结构描述(见以下程序) 广 义 表 (3)特点 ① 除空表的表头指针为空外,对任何非空表,其表头指针均指向一个表结点; ② 容易分清列表中原子和子表所在层次; ③ 最高层的表结点个数即为列表的长度。 (4)图形表示 举例如下。 例5-7 LS =(L1, L2, L3),其中L1 =( ),L2 =(?),L3=(?, (?, ?, ?)),如图所示。 例5-8 L4 =(?, L4),如图所示。 广 义 表 2. 扩展性链表存储表示 (1)结点结构 其中,tag是标志域,tag=1表示表结点,tag=0表示原子结点;hp指示表头的指针域;tp指示表尾的指针域;data是值域。 广 义 表 (2)扩展性链表存储结构(见以下程序) 广 义 表 (3)广义表类定义 广义表是一种扩展的线性链表,程序给出相关的类定义。 广 义 表 (4)图形表示 前面两个例子中的广

您可能关注的文档

文档评论(0)

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

1亿VIP精品文档

相关文档