矩阵及广义表.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
矩阵及广义表

* * 第3章 稀疏矩阵和广义表 数据结构(C++描述) 3.1 稀疏矩阵 矩阵是一个具有m行n列的数表,包含m*n个元素。 在实际应用中,我们经常会遇到一类矩阵:其矩阵阶数很大,非零元个数较少,零元很多,但非零元的排列没有一定规律,我们称这一类矩阵为稀疏矩阵。 稀疏矩阵的定义 三元组表 在压缩存放稀疏矩阵的非零元同时,若还存放此非零元所在的行号和列号,则称为三元组表法,即称稀疏矩阵可用三元组表进行压缩存储,但它是一种顺序存贮(按行优先顺序存放)。一个非零元有行号、列号、值,为一个三元组,整个稀疏矩阵中非零元的三元组合起来称为三元组表。 顺序存储结构定义: const int MaxTerms=100;//定义非零元的最大数目 struct Triple //定义一个三元组 { int row ,col; //非零元行、列号 ElemType val; //非零元值 }; struct SMatrix //定义稀疏矩阵 { int m,n,t ; //稀疏矩阵行、列数、非零元个数 Triple sm[MaxTerms+1]; //三元组表 }; 稀疏矩阵M和N的三元组表见图3-3。 (1)带行指针的链表 把具有相同行号的非零元用一个单链表连接起来,稀疏矩阵中的若干行组成若干个单链表,合起来称为带行指针的链表。例如,图3-1 的稀疏矩阵M的带行指针的链表描述形式见下图。 链接存储结构定义: (2)十字链表 3.1.3 稀疏矩阵的运算 稀疏矩阵的转置运算 对于一个m?n的A,它的转置是一个n?m的B矩阵,且B[i][j]=A[j][i],0≤in,0≤jm。例如,图3-1给出的M矩阵和图3-2给出的N矩阵互为转置矩阵。 在三元组表表示的稀疏矩阵中,怎样求得它的转置呢?从转置的性质知道,将A转置为B,就是将A的三元组表变为B的三元组表,这时可以将A的三元组表中i和j 的值互换,则得到的B的三元组表是一个按列优先顺序排列的三元组表,再将它的顺序适当调整,变成行优先排列,即得到转置矩阵B。下面将用两种方法处理: (1)按照A的列序进行转置 由于A的三元组表中列即为B的三元组表中行,在A中,按列扫描,则得到的B则按行优先存放。但为了找到A的每一列中所有的非零的元素,每次都必须从头到尾扫描A的三元组表(有多少列,则扫描多少遍),这时算法描述如下: SMatix Transpose(SMatrix M) {SMatix S; InitMatrix(S); int m,n,t; m=M.m;n=M.n;t=M.t; S.m=n;S.n=m;S.t=t; if (t==0) return S; int k=1; for (int col=1; col=n; col++) //按列号扫描 for(int i=1;i=t;i++) //对三元组M.sm扫描 if (M.sm[i].col==col) //进行转置 { S.sm[k].row=col; S.sm[k].col=M.sm[i].row; S.sm[k].val=M.sm[i].val; k++;} return S;} (2)按照A的行序进行转置 每扫描A中1个三元组,即将其转置后的1个三元组放入B中恰当的位置。可在转置前求出矩阵A的每一列col(即B中每一行)的第一个非零元转置后在B中三元组表中的正确位置pot[col],然后对A的三元组依次作转置时,只要将三元组按列号col放置到B中三元组表中的pot[col]位置,然后将pot[col]内容加1,以指示第col列的下一个非零元的正确位置。为了求得位置向量pot,只要先求出A的每一列中非零元个数num[col],然后利用下面公式求出所有pot[col](1≤col≤n): pot[1]=1 ? pot[col]=pot[col-1]+num[col-1] 参见教材P105表3-1 3.2 广义表 3.2.1 广义表的定义 广义表是第二章提到的线性表的推广。线性表中的元素仅限于单元素,即不可以再分,而广义表中的元素既可以是单元素,也可以是子表(另一个线性表)。 广义表是n≥0个元素a1,a2,…,an的有限序列,其中每一个ai或者是单元素,或者是一个子表。广义表通常记为LS=(a1

文档评论(0)

wujianz + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档