数据结构实验四稀疏矩阵运算_第1页
数据结构实验四稀疏矩阵运算_第2页
数据结构实验四稀疏矩阵运算_第3页
数据结构实验四稀疏矩阵运算_第4页
数据结构实验四稀疏矩阵运算_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

1、精品文档你我共享 数据结构实验四稀疏矩阵运算 1实验目的 掌握三元组法存储稀疏矩阵的方法及相关的基本操作。 2、实验内容 * 用三元组法存放稀疏矩阵 * 求出矩阵转置结果 * 求出矩阵相乘结果 输出结果矩阵 3、实验要求 * 用数组存放矩阵的三元组,矩阵的行数和列数及非o数据从键盘输入 * 要求采用稀疏矩阵快速转置算法 * 若两个矩阵不能相乘则输出Error ” 4、试验参考程序 typedef struct / 定义三元组 的元素 int i, j; int e; Triple; typedef struct / 定义矩阵 Triple dataMAXSIZE + 1; int mu, nu

2、, tu; TSMatrix; typedef struct / 定义行逻辑连接矩阵 Triple dataMAXSIZE + 2; in t rposMAXROW + 1; int mu, nu, tu; RLSMatrix; 矩阵输入函数 bool In PutTSMatrix(TSMatrix cout 请输出非零元素的位置和值: endl; for (int k = 1; k T.datak.i T.datak.j T.datak.e; return true; 请补充完成下列矩阵转置函数、矩阵乘法函数与矩阵输出函数 Bool Tra nsposeSMatrix(TSMatrix M,

3、 TSMatrix /定义预转置的矩阵 InPutTSMatrix(M, 0);/ 输入矩阵 int numMAXR0W+1; int cpotMAXROW+1; / 构建辅助数组 int q,p,t; T.tu=M.tu; T.mu=M.nu; T.nu=M.mu; if(T.tu) for(int col=1;col=M.nu;col+)numcol=0; for(t=1;t=M.tu;t+)+numM.datat.j; cpot1=1; for(int i=2;i=M.nu;i+)cpoti=cpoti-1+numi-1;/ 求出每一列中非零元素在三元组中出 现的位置 for(p=1;p

4、=M.tu;p+) col=M.datap.j; q=cpotcol; T.dataq.i=col; T.dataq.j=M.datap.i; T.dataq.e=M.datap.e;+cpotcol; cout 输入矩阵的转置矩阵为endl; OutPutSMatrix (T); return true; ,RLSMatrix /构建三个带链接信息”的三元组表示的数组 lnPutTSMatrix(M,1); /用普通三元组形式输入数组 lnPutTSMatrix(N,1); Count(M); Count(N); if(M.nu!=N.mu) return false; Q.mu=M.mu;

5、Q.nu=N.nu; Q.tu=0;/ Q 初始化 int ctempMAXR0W+1; / 辅助数组 int arow,tp,p,brow,t,q,ccol; if(M.tu*N.tu) / Q 是非零矩阵 for( arow=1;arow=M.mu;arow+) /memset(ctemp,O,N.nu); for(int x=1;x=N.nu;x+)/当前行各元素累加器清零 ctempx=0; +1 Q.rposarow=Q.tu+1;/当前行的首个非零元素在三元组中的位置为此行前所有非零元素 if(arowM.mu) tp=M.rposarow+1; else tp=M.tu+1; f

6、or(p=M.rposarow;ptp;p+)/对当前行每个非零元素进行操作 brow=M.datap.j; 在N中找到i值也操作元素的j值相等的行 if(browvN.mu) t=N.rposbrow+1; else t=N.tu+1; for(q=N.rposbrow;qt;q+)/对找出的行当每个非零元素进行操作 ccol=N.dataq.j; ctempccol += M.datap.e*N.dataq.e;/将乘得到对应值放在相应的元素累加器里面 for(ccol=1;ccolMAXSIZE) return false; Q.dataQ.tu.e=ctempccol; Q.dataQ

7、.tu.i=arow; Q.dataQ.tu.j=ccol; OutPutSMatrix(Q); return true; bool OutPutSMatrix( TSMatrix T) / 输出矩阵,按标准格式输出 int m,n,k=1; for(m=0 ;mT.mu;m+) for(n=O;nT.nu;n+) if(T.datak.i-1)=m cout vT.datak+.e; else cout.widt h(4 ); co ut 0; cout e ndl ; return true; AAAAAA 并建立main ()函数对上述函数进行测试 int main() TSMtrixT

8、SM1;/原矩阵 /TSMtrix T; /转置矩阵 TSMtrixTSM2;/相乘矩阵 TSMtrixTSM3;/乘后矩阵 int k; cout 请输入矩阵TSM1的行,列,非零元的个数(不超过10且不为0) endl; cinTSM1.muTSM1.nuTSM1.tu; for (k= 1 ;kTSM1.datak.i TSM1.datak.j TSM1.datak.e; coutvv TSM1 原矩阵:vvendl; coutvvTSMIvvendl; /TransposeSMatrix (TSM1,T); /coutvvTvvendl; /FastTransposeSMatrix (

9、T SM1,T); /快速转置 /coutvv 转置后的矩阵:vvendl; /coutvvTvvendl; int g; coutvv请输入矩阵TSM2的行,列,非零元的个数(不超过10且不为0): vvendl; cinTSM2.muTSM2.nuTSM2.tu; for (g= 1 ;gv=TSM2.tu;g+) coutvv 请输入第vvgvv 个数的情况,所在的行,列以及它的值:vvendl; cin TSM2.datag.i TSM2.datag.j TSM2.datag.e; coutvv TSM2 原矩阵:vvendl; coutvvTSM2vvendl; Multsmatrix (TSM1,TSM2,TSM3); coutvvTSM3vvendl; return 0; 沁园春雪 北国风光,

温馨提示

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

评论

0/150

提交评论