稀疏矩阵的三元组存储方法c语言,数据结构C语言版-稀疏矩阵的三元组顺序表存储表示和实现;...

《数据结构C语言版-稀疏矩阵的三元组顺序表存储表示和实现;》由会员分享,可在线阅读,更多相关《数据结构C语言版-稀疏矩阵的三元组顺序表存储表示和实现;(11页珍藏版)》请在人人文库网上搜索。

1、typedef int ElemType;/ 稀疏矩阵的三元组顺序表存储表示 #define MAXSIZE 100 / 非零元个数的最大值 typedef structint i,j;/ 行下标,列下标 ElemType e; / 非零元素值 Triple;typedef structTriple dataMAXSIZE+1; / 非零元三元组表,data0未用 int mu,nu,tu;/ 矩阵的行数、列数和非零元个数 TSMatrix;/ 创建稀疏矩阵Mint CreateSMatrix(TSMatrix *M)int i,m,n;ElemType e;int k;printf(请输入矩。

2、阵的行数,列数,非零元素个数:(逗号)n);scanf(%d,%d,%d,&(*M).mu,&(*M).nu,&(*M).tu);(*M).data0.i=0;/ 为以下比较顺序做准备 for(i = 1; i (*M).mu | n (*M).nu) k=1;if(m i,Np-i)case 1: *Qe=*Mp;Mp+;break;case 0: / M、N矩阵当前非零元素的行相等,继续比较列switch(comp(Mp-j,Np-j) case 1: *Qe=*Mp;Mp+;break;case 0: *Qe=*Mp;Qe-e+=Np-e;if(!Qe-e) / 元素值为0,不存入压缩矩。

3、阵 Qe-;Mp+;Np+;break;case -1: *Qe=*Np;Np+;break;case -1: *Qe=*Np;Np+;if(MpMe) / 矩阵M的元素全部处理完毕 while(NpNe) / 矩阵N的元素全部处理完毕 while(Mp=Me)Qe+;*Qe=*Mp;Mp+;(*Q).tu=Qe-Qh; / 矩阵Q的非零元素个数 return 1;/ 求稀疏矩阵的差Q=M-Nint SubtSMatrix(TSMatrix M,TSMatrix N,TSMatrix *Q) int i;for(i=1;i=N.tu;i+)N.datai.e*=-1;AddSMatrix(M,。

4、N,Q);return 1;/ 求稀疏矩阵的乘积Q=M*Nint MultSMatrix(TSMatrix M,TSMatrix N,TSMatrix *Q) int i,j,h=M.mu,l=N.nu,Qn=0;/ h,l分别为矩阵Q的行、列值,Qn为矩阵Q的非零元素个数,初值为0 ElemType *Qe;if(M.nu!=N.mu)return 0;(*Q).mu=M.mu;(*Q).nu=N.nu;Qe=(ElemType *)malloc(h*l*sizeof(ElemType); / Qe为矩阵Q的临时数组 / 矩阵Q的第i行j列的元素值存于*(Qe+(i-1)*l+j-1)中,初。

5、值为0 for(i=0;ih*l;i+)*(Qe+i)=0; / 赋初值0 for(i=1;i=M.tu;i+) / 矩阵元素相乘,结果累加到Qe for(j=1;j=N.tu;j+)if(M.datai.j=N.dataj.i)*(Qe+(M.datai.i-1)*l+N.dataj.j-1) +=M.datai.e * N.dataj.e;for(i=1;i=M.mu;i+)for(j=1;j=N.nu;j+)if(*(Qe+(i-1)*l+j-1)!=0)Qn+;(*Q).dataQn.e=*(Qe+(i-1)*l+j-1);(*Q).dataQn.i=i;(*Q).dataQn.j=j。

6、;free(Qe);(*Q).tu=Qn;return 1;/ 算法5.1 P99/ 求稀疏矩阵M的转置矩阵T。int TransposeSMatrix(TSMatrix M,TSMatrix *T)int p,q,col;(*T).mu=M.nu;(*T).nu=M.mu;(*T).tu=M.tu;if(*T).tu)q=1;for(col=1;col=M.nu;+col)/先将列转换成行for(p=1;p=M.tu;+p)/再将行转换成列if(M.datap.j=col)(*T).dataq.i=M.datap.j;(*T).dataq.j=M.datap.i;(*T).dataq.e=M。

7、.datap.e;+q;return 1;/ 算法5.2 P100/ 快速求稀疏矩阵M的转置矩阵T。int FastTransposeSMatrix(TSMatrix M,TSMatrix *T) int p,q,t,col,*num,*cpot;num=(int *)malloc(M.nu+1)*sizeof(int);/ 生成数组(0不用) cpot=(int *)malloc(M.nu+1)*sizeof(int);/ 生成数组(0不用) (*T).mu=M.nu;(*T).nu=M.mu;(*T).tu=M.tu;if(*T).tu)for(col=1;col=M.nu;+col)nu。

8、mcol=0; / 设初值 for(t=1;t=M.tu;+t) / 求M中每一列含非零元素个数 +numM.datat.j;cpot1=1;/ 求第col列中第一个非零元在(*T).data中的序号for(col=2;col=M.nu;+col) cpotcol=cpotcol-1+numcol-1;for(p=1;p=M.tu;+p)col=M.datap.j;q=cpotcol;(*T).dataq.i=M.datap.j;(*T).dataq.j=M.datap.i;(*T).dataq.e=M.datap.e;+cpotcol;free(num);free(cpot);return 。

9、1;int main()TSMatrix A,B,C;printf(创建矩阵A: );CreateSMatrix(&A);PrintSMatrix(A);printf(由矩阵A复制矩阵B: );CopySMatrix(A,&B);PrintSMatrix(B);DestroySMatrix(&B);printf(销毁矩阵B后:n);PrintSMatrix(B);printf(重创矩阵B:(注意与矩阵A的行、列数相同,这样方便后面的测试行、列分别为%d,%d)n, A.mu, A.nu);CreateSMatrix(&B);PrintSMatrix(B);printf(矩阵C1(A+B): )。

10、;AddSMatrix(A,B,&C);PrintSMatrix(C);DestroySMatrix(&C);printf(矩阵C2(A-B): );SubtSMatrix(A,B,&C);PrintSMatrix(C);DestroySMatrix(&C);printf(矩阵C3(A的转置): );TransposeSMatrix(A,&C);PrintSMatrix(C);DestroySMatrix(&A);DestroySMatrix(&B);DestroySMatrix(&C);printf(创建矩阵A2: );CreateSMatrix(&A);PrintSMatrix(A);pr。

11、intf(创建矩阵B3:(行数应与矩阵A2的列数相同=%d)n,A.nu);CreateSMatrix(&B);PrintSMatrix(B);printf(矩阵C5(A*B): );MultSMatrix(A,B,&C);PrintSMatrix(C);DestroySMatrix(&A);DestroySMatrix(&B);DestroySMatrix(&C);printf(创建矩阵A: );CreateSMatrix(&A);PrintSMatrix(A);FastTransposeSMatrix(A,&B);printf(矩阵B(A的快速转置): );PrintSMatrix(B);。

12、DestroySMatrix(&A);DestroySMatrix(&B);system(pause);return 0;/*输出效果:创建矩阵A: 请输入矩阵的行数,列数,非零元素个数:(逗号)3,3,3请按行序顺序输入第1个非零元素所在的行(13),列(13),元素值:(逗号)1,1,1请按行序顺序输入第2个非零元素所在的行(13),列(13),元素值:(逗号)1,3,2请按行序顺序输入第3个非零元素所在的行(13),列(13),元素值:(逗号)3,3,33行3列3个非零元素。行 列 元素值1 1 11 3 23 3 3由矩阵A复制矩阵B:3行3列3个非零元素。行 列 元素值1 1 11 。

13、3 23 3 3销毁矩阵B后:0行0列0个非零元素。行 列 元素值重创矩阵B:(注意与矩阵A的行、列数相同,这样方便后面的测试行、列分别为3,3)请输入矩阵的行数,列数,非零元素个数:(逗号)3,3,3请按行序顺序输入第1个非零元素所在的行(13),列(13),元素值:(逗号)1,2,1请按行序顺序输入第2个非零元素所在的行(13),列(13),元素值:(逗号)2,1,2请按行序顺序输入第3个非零元素所在的行(13),列(13),元素值:(逗号)3,1,33行3列3个非零元素。行 列 元素值1 2 12 1 23 1 3矩阵C1(A+B):3行3列6个非零元素。行 列 元素值1 1 11 2 。

14、11 3 22 1 23 1 33 3 3矩阵C2(A-B):3行3列6个非零元素。行 列 元素值1 1 11 2 -11 3 22 1 -23 1 -33 3 3矩阵C3(A的转置):3行3列3个非零元素。行 列 元素值1 1 13 1 23 3 3创建矩阵A2: 请输入矩阵的行数,列数,非零元素个数:(逗号)3,3,3请按行序顺序输入第1个非零元素所在的行(13),列(13),元素值:(逗号)1,1,1请按行序顺序输入第2个非零元素所在的行(13),列(13),元素值:(逗号)1,3,2请按行序顺序输入第3个非零元素所在的行(13),列(13),元素值:(逗号)3,3,33行3列3个非零元。

15、素。行 列 元素值1 1 11 3 23 3 3创建矩阵B3:(行数应与矩阵A2的列数相同=3)请输入矩阵的行数,列数,非零元素个数:(逗号)3,3,2请按行序顺序输入第1个非零元素所在的行(13),列(13),元素值:(逗号)1,3,1请按行序顺序输入第2个非零元素所在的行(13),列(13),元素值:(逗号)2,2,23行3列2个非零元素。行 列 元素值1 3 12 2 2矩阵C5(A*B):3行3列1个非零元素。行 列 元素值1 3 1创建矩阵A: 请输入矩阵的行数,列数,非零元素个数:(逗号)3,3,2请按行序顺序输入第1个非零元素所在的行(13),列(13),元素值:(逗号)1,2,2请按行序顺序输入第2个非零元素所在的行(13),列(13),元素值:(逗号)3,1,23行3列2个非零元素。行 列 元素值1 2 23 1 2矩阵B(A的快速转置):3行3列2个非零元素。行 列 元素值1 3 22 1 2请按任意键继续. . .*/。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值