您好,欢迎光临本网站![请登录][注册会员]  
文件名称: 稀疏矩阵运算器
  所属分类: C/C++
  开发工具:
  文件大小: 730kb
  下载次数: 0
  上传时间: 2017-03-14
  提 供 者: duany*****
 详细说明: #include #define maxsize 100 typedef struct { int i,j; //该非零元的行和列 int v; //该非零元的值 }triple; typedef struct { triple data[maxsize]; //非零元三元组表,data[0]未用 int rpos[maxsize]; int m,n,t; //矩 阵的行数,列数和非零元个数 }tripletable; void convert() //矩阵的转置 { int k; tripletable A,B; printf("输入稀疏矩阵A的行数,列数和非零元个数:"); scanf("%d %d %d",&A.m,&A.n,&A.t); for(k=1;k<=A.t;k++) { printf("输入第%d个非0元素的行数,列数和值:",k); scanf("%d %d %d",&A.data[k].i,&A.data[k].j,&A.data[k].v); } B.m=A.m;B.n=A.n;B.t=A.t; if(B.t) { int p; int q=1,col; for(col=1;col<=A.n;++col) { for(p=1;p<=A.t;++p) { if(A.data[p].j==col) { B.data[q].i=A.data[p].j; B.data[q].j=A.data[p].i; B.data[q].v=A.data[p].v; ++q; } } } int shuru[100][100]={0}; for(k=1;k<=B.t;k++) { shuru[B.data[k].j][B.data[k].i]=B.data[k].v; } printf("输入为:\n"); for(k=1;k<=B.m;k++) { int l; for(l=1;l<=B.n;l++) printf("%d ",shuru[k][l]); printf("\n"); } int result[100][100]={0}; for(k=1;k<=B.t;k++) { result[B.data[k].i][B.data[k].j]=B.data[k].v; } printf("结果为:\n"); for(k=1;k<=B.n;k++) { int l; for(l=1;l<=B.m;l++) printf("%d ",result[k][l]); printf("\n"); } } } void add() //矩阵的加法 { int k; tripletable A,B; printf("输入稀疏矩阵A的行数,列数和非零元个数:"); scanf("%d %d %d",&A.m,&A.n,&A.t); for(k=1;k<=A.t;k++) { printf("输入第%d个非0元素的行数,列数和值:",k); scanf("%d %d %d",&A.data[k].i,&A.data[k].j,&A.data[k].v); } printf("输入稀疏矩阵B的行数,列数和非零元个数:"); scanf("%d %d %d",&B.m,&B.n,&B.t); for(k=1;k<=B.t;k++) { printf("输入第%d个非0元素的行数,列数和值:",k); scanf("%d %d %d",&B.data[k].i,&B.data[k].j,&B.data[k].v); } if(A.m!=B.m||A.n!=B.n) { printf("输入错误:A与B的行数或列数不相同,请重新输入\n"); return; } int a[100][100]={0}; for(k=1;k<=A.t;k++) { a[A.data[k].i][A.data[k].j]=A.data[k].v; } printf("A输入为:\n"); for(k=1;k<=A.m;k++) { int l; for(l=1;l<=A.n;l++) printf("%d ",a[k][l]); printf("\n"); } int b[100][100]={0}; for(k=1;k<=B.t;k++) { b[B.data[k].i][B.data[k].j]=B.data[k].v; } printf("B输入为:\n"); for(k=1;k<=B.m;k++) { int l; for(l=1;l<=B.n;l++) printf("%d ",b[k][l]); printf("\n"); } int c[100][100]={0}; for(k=1;k<=A.m;k++) { int l; for(l=1;l<=A.n;l++) { c[k][l]=a[k][l]+b[k][l]; } } printf("加法结果C为:\n"); for(k=1;k<=A.m;k++) { int l; for(l=1;l<=A.n;l++) printf("%d ",c[k][l]); printf("\n"); } } void jian() //矩阵的减法 { int k; tripletable A,B; printf("输入稀疏矩阵A的行数,列数和非零元个数:"); scanf("%d %d %d",&A.m,&A.n,&A.t); for(k=1;k<=A.t;k++) { printf("输入第%d个非0元素的行数,列数和值:",k); scanf("%d %d %d",&A.data[k].i,&A.data[k].j,&A.data[k].v); } printf("输入稀疏矩阵B的行数,列数和非零元个数:"); scanf("%d %d %d",&B.m,&B.n,&B.t); for(k=1;k<=B.t;k++) { printf("输入第%d个非0元素的行数,列数和值:",k); scanf("%d %d %d",&B.data[k].i,&B.data[k].j,&B.data[k].v); } if(A.m!=B.m||A.n!=B.n) { printf("输入错误:A与B的行数或列数不相同,请重新输入\n"); return; } int a[100][100]={0}; for(k=1;k<=A.t;k++) { a[A.data[k].i][A.data[k].j]=A.data[k].v; } printf("A输入为:\n"); for(k=1;k<=B.m;k++) { int l; for(l=1;l<=A.n;l++) printf("%d ",a[k][l]); printf("\n"); } int b[100][100]={0}; for(k=1;k<=B.t;k++) { b[B.data[k].i][B.data[k].j]=B.data[k].v; } printf("B输入为:\n"); for(k=1;k<=B.m;k++) { int l; for(l=1;l<=B.n;l++) printf("%d ",b[k][l]); printf("\n"); } int c[100][100]={0}; for(k=1;k<=A.m;k++) { int l; for(l=1;l<=A.n;l++) { c[k][l]=a[k][l]-b[k][l]; } } printf("减法结果C为:\n"); for(k=1;k<=A.m;k++) { int l; for(l=1;l<=A.n;l++) printf("%d ",c[k][l]); printf("\n"); } } void multi() //矩阵的乘法 { int k; tripletable A,B,C; printf("输入稀疏矩阵A的行数,列数和非零元个数:"); scanf("%d %d %d",&A.m,&A.n,&A.t); for(k=1;k<=A.t;k++) { printf("输入第%d个非0元素的行数,列数和值:",k); scanf("%d %d %d",&A.data[k].i,&A.data[k].j,&A.data[k].v); } int row=1; for(k=1;k<=A.t;k++) { while(row<=A.data[k].i) { A.rpos[row++]=k; } } while(row<=A.m)A.rpos[row++]=A.t+1; printf("输入稀疏矩阵B的行数,列数和非零元个数:"); scanf("%d %d %d",&B.m,&B.n,&B.t); for(k=1;k<=B.t;k++) { printf("输入第%d个非0元素的行数,列数和值:",k); scanf("%d %d %d",&B.data[k].i,&B.data[k].j,&B.data[k].v); } row=1; for(k=1;k<=B.t;k++) { while(row<=B.data[k].i) { B.rpos[row++]=k; } } while(row<=B.m)B.rpos[row++]=B.t+1; if(A.n!=B.m) { printf("输入错误:A的列数不等于B的行数,请重新输入\n"); return; } C.m=A.m;C.n=B.n;C.t=0; int arow,p,q,ccol,t,tp; if(A.t*B.t!=0) { for(arow=1;arow<=A.m;++arow) { int ctemp[maxsize]={0}; C.rpos[arow]=C.t+1; if(arowmaxsize)return; C.data[C.t].i=arow; C.data[C.t].j=ccol; C.data[C.t].v=ctemp[ccol]; } } } } int a[100][100]={0}; for(k=1;k<=A.t;k++) { a[A.data[k].i][A.data[k].j]=A.data[k].v; } printf("A输入为:\n"); for(k=1;k<=A.m;k++) { int l; for(l=1;l<=A.n;l++) printf("%d ",a[k][l]); printf("\n"); } int b[100][100]={0}; for(k=1;k<=B.t;k++) { b[B.data[k].i][B.data[k].j]=B.data[k].v; } printf("B输入为:\n"); for(k=1;k<=B.m;k++) { int l; for(l=1;l<=B.n;l++) printf("%d ",b[k][l]); printf("\n"); } int c[100][100]={0}; for(k=1;k<=C.t;k++) { c[C.data[k].i][C.data[k].j]=C.data[k].v; } printf("乘法结果C为:\n"); for(k=1;k<=C.m;k++) { int l; for(l=1;l<=C.n;l++) printf("%d ",c[k][l]); printf("\n"); } } void main() { printf("============= 菜 单 ==============\n"); printf(" 1 矩阵转置\n"); printf(" 2 矩阵加法\n"); printf(" 3 矩阵减法\n"); printf(" 4 矩阵乘法\n"); printf("======================================\n\n"); loop: printf("请选择相应操作的序号:"); int y; scanf("%d",&y); switch(y) { case 1: convert(); printf("\n"); goto loop; case 2: add(); printf("\n"); goto loop; case 3: jian(); printf("\n"); goto loop; case 4: multi(); printf("\n"); goto loop; } } ...展开收缩
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 相关搜索: 数据结构
 输入关键字,在本站1000多万海量源码库中尽情搜索: