第五章数组和广义表课件.ppt

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

例1:三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的 、 和 。 列下标 元素值 例2:写出右图所示稀疏矩阵的压缩存储形式。 0 12 9 0 0 0 0 0 0 0 0 0 -3 0 0 0 14 0 0 0 24 0 0 0 0 18 0 0 0 0 15 0 0 -7 0 0 (( 1,2,12) ,(1,3,9), (3,1,-3), (3,5,14), (4,3,24), (5,2,18) ,(6,1,15), (6,4,-7)) 用三元组表表示: 行下标 随机稀疏矩阵的压缩存储方法: 一、三元组顺序表 二、行逻辑联接的顺序表 三、 十字链表 #define MAXSIZE 12500 typedef struct { int i, j; //该非零元的行下标和列下标 ElemType e; // 该非零元的值 } Triple; // 三元组类型 一、三元组顺序表 typedef union { Triple data[MAXSIZE + 1]; int mu, nu, tu; } TSMatrix; // 稀疏矩阵类型 用三元组顺序表表示: 0 12 9 0 0 0 0 0 0 0 0 0 -3 0 0 0 14 0 0 0 24 0 0 0 0 18 0 0 0 0 15 0 0 -7 0 0 -7 4 6 15 1 6 18 2 5 24 3 4 14 5 3 -3 1 3 9 3 1 12 2 1 注意:为更可靠描述,通常再加一行“总体”信息:即总行数、总列数、非零元素总个数 8 6 6 value j i 8 7 6 5 4 3 2 1 0 用常规的二维数组表示时的算法 其时间复杂度为: O(mu×nu) for (col=1; col=nu; ++col) for (row=1; row=mu; ++row) T[col][row] = M[row][col]; 矩阵转置 0 12 9 0 0 0 0 0 0 0 0 0 -3 0 0 0 14 0 0 0 24 0 0 0 0 18 0 0 0 0 15 0 0 -7 0 0 0 0 –3 0 0 15 12 0 0 0 18 0 9 0 0 24 0 0 0 0 0 0 0 -7 0 0 14 0 0 0 0 0 0 0 0 0 (6, 4, -7) (6, 1, 15) (5, 2, 18) (4, 3, 24) (3, 5, 14) (3, 1, -3) (1, 3, 9 ) (1, 2, 12) (5, 3, 14) (4, 6, -7) (3, 4, 24) (3, 1, 9) (2, 5, 18) (2, 1, 12) (1, 6, 15) (1, 3, -3) 三 元 组 表 a.data 三 元 组 表 b.data 转置后 M T 答:肯定不正确! 除了: (1)每个元素的行下标和列下标互换(即三元组中的i和j互换); 提问:若采用三元组压缩技术存储稀疏矩,只要把每个元素的行下标和列下标互换,就完成了对该矩阵的转置运算,这种说法正确吗? 还应该:(2)T的总行数mu和总列数nu与M值不 同(互换); (3)重排三元组内元素顺序,使转置 后的三元组也按行(或列)为主 序有规律的排列。 上述(1)和(2)容易实现,难点在(3)。 有两种实现方法 压缩转置 (压缩)快速转置 方法1:压缩转置 思路:反复扫描a.dat

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档