数据构造稀疏矩阵应用.docx
数据构造稀疏矩阵应用实验五数组的运算实验目的:把握稀疏矩阵的压缩存储方法及主要运算的实现。实验内容与要求:设计一个稀疏矩阵计算器,要求能够:输入并建立稀疏矩阵;输出稀疏矩阵;执行两个矩阵相加;求一个矩阵的转置矩阵。程序代码:#include#definesmax20typedefintdatatype;typedefstructinti,j;datatypev;node;typedefstructnodedatasmax;intm,n,t;spmatrix;voidcreat(spmatrixa)创立输出稀疏矩阵intk=0;printf("请输入稀疏矩阵:n");scanf("%d,%d,%d",&a.m,&a.n,scanf("%d,%d,%d",&a.data0.i,&a.data0.j,&a.data0.v);while(a.datak.v!=0)以0元素作为结束标志,由于稀疏矩阵不包含0元素k+;scanf("%d,%d,%d",&a.datak.i,&a.datak.j,&a.datak.v);printf("输出的稀疏矩阵是:n");printf("%d,%d,%dn",a.m,a.n,a.t);for(k=0;k下一页scanf("%d,%d,%d",&a.data0.i,&a.data0.j,&a.data0.v);while(a.datak.v!=0)k+;scanf("%d,%d,%d",&a.datak.i,&a.datak.j,&a.datak.v);for(k=0;ka.datak.j>a.datak+1.j)q=a.datak.i;a.datak.i=a.datak+1.i;a.datak+1.i=q;q=a.datak.j;a.datak.j=a.datak+1.j;a.datak+1.j=q;q=a.datak.v;a.datak.v=a.datak+1.v;a.datak+1.v=q;printf("输出转置后的稀疏矩阵:n");printf("%d,%d,%dn",a.n,a.m,a.t);for(k=1;kprintf("输出最终结果的稀疏矩阵C:n");printf("%d,%d,%dn",a.m,a.n,(a.t+b.t-r);输出稀疏矩阵表头时只需将行列元素交换输出即可,元素个数输出时要注意相等行列元素合并进行了几次操作,即用r记录操作步骤的次数,每进行一次操作那么最终稀疏矩阵就少一个数组元素,同时r又是伴随步骤增加的for(z=1;z心得体会:程序开始教师指点了一下,后面的算法以及函数全为本人长时间编写,全用一维数组包含多个数据的思想去操作,捉住主的数组元素值的变化,步步为营,一个目的一个目的的实现,在操作时最好对这次操作结果做一次打印,就像程序中进行前后元素交换的时候主数组下标加1是为何没有研究透,不过通过每步打印发现了这个规律,要不然找死都找不出结果为何少一个元素,开始元素为何是一串数字乱码。