[工学]数据结构C语言版第5章数组和广义表.ppt

[工学]数据结构C语言版第5章数组和广义表.ppt

  1. 1、本文档共64页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
三元组顺序表又称有序的双下标法。 三元组顺序表的优点:非零元在表中按行序有序存储,因此便于进行依行顺序处理的矩阵运算。 三元组顺序表的缺点:不能随机存取。若按行号存取某 一行中的非零元,则需从头开始进行查找。 2、行逻辑联接的顺序表(带行表的三元组) 在稀疏矩阵中,若要随机存取任意一行的非零元,需要知道 每一行的第一个非零元在三元组表中的位置,而这必须从第一个 元素起进行搜索查询。 14 3 6 -7 6 4 24 4 3 9 1 3 18 5 2 12 1 2 15 6 1 -3 3 1 8 6 7 9 8 8 7 5 3 1 cpot(col) 0 1 0 1 2 2 2 num(col) 7 6 5 4 3 2 1 col 若在稀疏矩阵的存储结构中增加一个行表 rpos ——快速转置算法中的 cpot,指示稀疏矩阵中每行的 非零元素在三元组表中的起始位置,则不必从第一个 元素起进行搜索查询。称这种“带行链接信息”的三元 组表为:行逻辑联接的顺序表。 #define MAXSIZE 12500 //假设非零元个数的最大值 typedef struct { int i, j; //该非零元的行列下标 Elemtype e; }Triple; typedef struct { Triple data[MAXSIZE + 1]; int mu, nu, tu; //矩阵的行、列数和非零元个数 }TSMatrix; int rpos[MAXRC + 1]; // 指示各行第一个非零元的位置 两个稀疏矩阵相乘时,可以看出这种表示方法的优越性。 RLSMatrix; ▲ 矩阵乘法 设矩阵 M 是 m1×n1 矩阵,N 是 m2×n2 矩阵;只有 n1 = m2 时,才能相乘得到结果矩阵 Q = M×N(一个 m1×n2 的矩阵)。 矩阵相乘的经典算法: for(i=1; i=m1; i++) for(j=1; j=n2; j++) { Q[i][j]=0; for(k=1; k=n1; k++) Q[i][j] = Q[i][j] + M[i][k] * N[k][j]; } i i j j k k 不论是否为零,都要进行一次乘法运算。 没必要! 2 1 3 -1 2 2 5 4 1 3 1 1 e j i 4 2 3 -2 1 3 1 1 2 2 2 1 e j i e j i M[i][k] * N[k][j]; 2 2 3 3 5 1 rpos[row] 4 1 row 6 2 1 -1 1 2 4 2 3 0 0 6 -1 0 0 4 注意:两个稀疏矩阵相乘的结果 不一定是稀疏矩阵。 int MulSMatrix (RLSMatrix M, RLSMatrix N, RLSMatrix *Q) { if (M.nu != N.mu) return ERROR; Q.mu = M.mu; Q.nu = N.nu; Q.tu = 0; // Q 初始化 if (M.tu * N.tu != 0) // Q 是非零矩阵 for (arow=1; arow=M.mu; ++arow) //逐行处理 M { ctemp[ ]=0 ; // 当前行各元素的累加器清零 Q.rpos[arow] = Q.tu + 1; if (arowM.mu) tp=M.rpos[arow+1]; else tp=M.tu+1; for (p=M.rpos[arow]; pM.rpos[arow+1]; ++p)

文档评论(0)

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

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

1亿VIP精品文档

相关文档