（1）稀疏矩阵的存储
（2）稀疏矩阵加法
（3）矩阵乘法
（4）矩阵转置

3个回答

![图片说明](https://img-ask.csdn.net/upload/201511/08/1446950897_975177.png) ``` #include<stdio.h> #define MAX_SIZE 100 #define OK 1 #define ERROR -1 typedef int ElemType; typedef int Status; typedef struct { int i, j; ElemType e; }Triple; typedef struct { Triple data[MAX_SIZE]; int mu, nu, tu; }TSMatrix; Status creatSMatrix(TSMatrix &M) { int row, col, k = 0; scanf("%d %d", &M.mu, &M.nu); for(row = 1; row <= M.mu; row++) { for(col = 1; col <= M.nu; col++) { scanf("%d", &M.data[k].e); if(M.data[k].e) { M.data[k].i = row; M.data[k].j = col; k++; } } } M.tu = k; // printf("k = %d\n", k); return OK; } Status printfMatrix(TSMatrix M) { int row, col, temp, k = 0; // printf("T.mu=%d T.nu=%d\n", M.mu, M.nu); for(row = 1; row <= M.mu; row++) { for(col = 1; col <= M.nu; col++) { if(row == M.data[k].i && col == M.data[k].j) { printf("%d ", M.data[k].e); k++; } else printf("0 "); } printf("\n"); } } Status transportSMatrix(TSMatrix M, TSMatrix &T) { int col, p, k = 0; T.mu = M.nu; T.nu = M.mu; T.tu = M.tu; for(col = 1; col <= M.nu; col ++){ for(p = 0; p < M.tu; p ++){ if(col == M.data[p].j) { T.data[k].i = M.data[p].j; T.data[k].j = M.data[p].i; T.data[k].e = M.data[p].e; k ++; } } } // printf("M.data[1].j=%d k = %d\n", M.data[1].j, k); } Status destoryMatrix(TSMatrix &M){ M.mu = M.nu = M.tu = 0; } int main() { TSMatrix M, T; creatSMatrix(M); transportSMatrix(M, T); printfMatrix(T); destoryMatrix(M); return 0; } ```

#include<iostream> using namespace std; #define OK 1 #define ERROR 0 #define maxsize 100 typedef int Elemtype; typedef int Status; typedef struct { int i, j; Elemtype e; }Triple; typedef struct { Triple data[maxsize + 1]; int mu, nu, tu; }TSMatrix; Status CreateTriple(TSMatrix& T) { cout << " 请输入稀疏矩阵的行数，列数和非零元个数：" << endl; cin >> T.mu >> T.nu >> T.tu; cout << "请依次输入" << T.tu << "个元素所处的行数，列数和值：" << endl; for (int i = 1; i <= T.tu; i++) { cin >> T.data[i].i >> T.data[i].j >> T.data[i].e; } return OK; } Status TransposeTSMatrix(TSMatrix T, TSMatrix& Q) { Q.mu = T.nu; Q.nu = T.mu; Q.tu = T.tu; if (Q.tu) { int q = 1; for (int col = 1; col <= T.nu; col++) //col为列标 for (int p = 1; p <= T.mu; p++) if (T.data[p].j == col) { Q.data[q].i = T.data[p].j; Q.data[q].j = T.data[p].i; Q.data[q].e = T.data[p].e; q++; } }return OK; } Status AddTSMatrix(TSMatrix T, TSMatrix Q, TSMatrix& A) { if (T.mu != Q.mu || T.nu != Q.nu) { cout << "两矩阵行数或列数不相等，无法相加！" << endl; return ERROR; } A.mu = T.mu; A.nu = T.nu; A.tu = T.tu + Q.tu; int mtu = 1, ntu = 1, k = 1; int x; while (mtu <= T.tu && ntu <= Q.tu) { //若T的行数与Q的行数相同 if (T.data[mtu].i == Q.data[ntu].i) { if (T.data[mtu].j < Q.data[ntu].j) //若T的列标小于Q的列标 { A.data[k].i = T.data[mtu].i; // 将T中的非零元素赋给A A.data[k].j = T.data[mtu].j; A.data[k].e = T.data[mtu].e; k++; mtu++; } else if (T.data[mtu].j > Q.data[ntu].j) //若T的列标大于Q的列标 { A.data[k].i = Q.data[ntu].i; // 将Q中的非零元素赋给A A.data[k].j = Q.data[ntu].j; A.data[k].e = Q.data[ntu].e; k++; ntu++; } else { //若T的列标等于Q的列标 //当两矩阵某一位置行列相同且元素非零，则将两非零元素相加 x = T.data[mtu].e + Q.data[ntu].e; if (x != 0) { A.data[k].i = T.data[mtu].i; A.data[k].j = T.data[mtu].j; // 将T中的非零元素赋给A A.data[k].e = x; k++; } mtu++; ntu++; } } else if (T.data[mtu].i < Q.data[ntu].i) //若T的行标小于Q的行标相同 { A.data[k].i = T.data[mtu].i; A.data[k].j = T.data[mtu].j; // 将T中的非零元素赋给A A.data[k].e = T.data[mtu].e; k++; mtu++; } else //若T的行标大于Q的行标相同 { A.data[k].i = Q.data[ntu].i; // 将Q中的非零元素赋给A A.data[k].j = Q.data[ntu].j; A.data[k].e = Q.data[ntu].e; k++; ntu++; } } while (ntu < Q.tu) //当Q中有元素剩余时 { A.data[k].i = Q.data[ntu].i; // 将T中的非零元素赋给A A.data[k].j = Q.data[ntu].j; A.data[k].e = Q.data[ntu].e; k++; ntu++; } A.tu = k; //A(相加后的矩阵）的非零元素个数 return OK; } Status PrintTSMatrix(TSMatrix T) { cout << "稀疏矩阵的行数，列数及非零元个数为：" << T.mu << " " << T.nu << " " << T.tu << endl; cout << "矩阵中的非零元素为:" << endl; for (int i = 1; i <= T.tu; i++) { cout << "(" << T.data[i].i << "," << T.data[i].j << "," << T.data[i].e << ")" << endl; } return OK; } int main() { TSMatrix T, Q, A; int n; cout << "|-----------------------------|" << endl; cout << "|1------------创建一个稀疏矩阵|" << endl; cout << "|2------------------矩阵的转置|" << endl; cout << "|3----------------两个矩阵相加|" << endl; cout << "|-----------------------------|" << endl; cout << "请输入操作数：" << endl; cin >> n; if (n < 0 || n>3) { cout << "无效操作！请重新输入！" << endl; cin >> n; } else while (n > 0 && n < 4) { switch (n) { case 1: CreateTriple(T); cout << "构造稀疏矩阵完成!矩阵如下：" << endl; PrintTSMatrix(T); cout << "如需继续操作，请输入操作码：" << endl; cin >> n; break; case 2: cout << "请先输入待转置的矩阵：" << endl; CreateTriple(T); TransposeTSMatrix(T, Q); cout << "转置后的矩阵为：" << endl; PrintTSMatrix(Q); cout << "如需继续操作，请输入操作码：" << endl; cin >> n; break; case 3: cout << "请输待第一个稀疏矩阵：" << endl; CreateTriple(T); cout << "请输入第二个稀疏矩阵：" << endl; CreateTriple(Q); AddTSMatrix(T, Q, A); cout << "相加后的矩阵为：" << endl; PrintTSMatrix(A); cout << "如需继续操作，请输入操作码：" << endl; cin >> n; break; } } } ![图片说明](https://img-ask.csdn.net/upload/201911/17/1573962601_259153.png)

Java语言定义一个4x4的二维数组，然后从键盘输入16个数字构成矩阵，然后将转置矩阵输出出来

Java语言定义一个4x4的二维数组，然后从键盘输入16个数字构成矩阵，然后将转置矩阵输出出来 在线等

#include<stdio.h> //#include<stdlib.h> #define MAXSIZE 12500 #define ok 1 typedef int ElemType; typedef int status; typedef struct { int ru,cu; ElemType e; }Triple ; typedef struct { Triple data[MAXSIZE+1]; int m,n,t; }TSMatrix; status Transpose(TSMatrix M,TSMatrix T){ int q,col,p; T.m=M.n;T.n=M.m;T.t=M.t; if(T.t){ q=1; for(col=1;col<=M.n;col++) { for(p=1;p<=M.m;p++) { if(M.data[p].cu==col){ T.data[q].ru=M.data[p].cu; T.data[q].cu=M.data[p].ru; T.data[q].e=M.data[p].e; q++; } } } return ok; } void main() { int i,j,c,r; int a[10][10]; printf("请输入矩阵行数和列数\n"); scanf("%d %d",&r,&c); printf("请输入矩阵\n"); for(i=1;i<=r;i++) { for(j=1;j<=c;j++) { scanf("%d",&a[i][j]); } } TSMatrix M,T; M.m=r;M.n=c;M.t=1; for(i=1;i<=r;i++) { for(j=1;j<=c;j++) { if(a[i][j]) { M.data[M.t].ru=i; M.data[M.t].cu=j; M.data[M.t].e=a[i][j]; M.t++; } } } Transpose(M,T); int x=1,b[c][r]; for(i=1;i<=c;i++) for(j=1;j<=r;j++) { if(T.data[x].i==i&&T.data[x].j==j) { b[i][j]=T.data[x].e; x++; } else b[i][j]; } for(i=1;i<=r;i++) { for(j=1;j<=c;j++) printf("%d",b[i][j]); printf("\n"); } }![图片](https://img-ask.csdn.net/upload/201710/12/1507819652_454000.jpg)

Java语言，实现矩阵的转置的算法怎么实现，怎么按照行列输入矩阵？

Java语言，实现矩阵的转置的算法怎么实现，怎么按照行列输入矩阵？

#include <iostream> using namespace std; const int row = 2; const int column = 2; void PrintMatrix(int m[][column]); void ReverseMatrix(int matrix[][column]); void main() { cout<<"请输入"<<(row * column)<<"个数字"<<endl; int matrix[row][column]; for(int i = 0; i < row; ++i) { for(int j = 0; j < column; ++j) { cin>>matrix[i][j]; } } PrintMatrix(matrix); ReverseMatrix(matrix); cout<<"转置后："<<endl; PrintMatrix(matrix); } void PrintMatrix(int matrix[][column]) { for(int i = 0; i < row; i++) { for(int j = 0; j < column; j++) { cout<<matrix[i][j]<<" "; } cout<<endl<<endl<<endl; } } void ReverseMatrix(int matrix[][column]) { for(int i = 0; i < row; i++) { for(int j = 0; j < column; j++) { int temp = matrix[i][j]; matrix[i][j] = matrix[j][i]; matrix[j][i] = temp; } } } //求解释为什么矩阵转置不成功，还是原来的矩阵

C语言，希望能给出完整的源程序，在下感激不尽，希望哪位大神能够相助，在下感谢万分！

c语言简单题，求矩阵的转置矩阵

![图片说明](https://img-ask.csdn.net/upload/201901/04/1546611499_210346.png) 我的答案： ``` #include <stdio.h> #define N 10 void Transpose(int (*a)[N], int n); void Swap(int *x, int *y); void InputMatrix(int (*a)[N], int n); void PrintMatrix(int (*a)[N], int n); void InputMatrix(int (*a)[N], int n) { int i,j; for(i = 0;i < n ;i++) { for(j = 0;j < n; j++) { scanf("%d",&a[i*n + j]); } } } void Transpose(int (*a)[N], int n) { int i,j; for(i = 0;i < n ;i++) { for(j = 0;j < n; j++) { Swap(&a[i*n + j], &a[j*n + i]); } } } void Swap(int *x, int *y) { int temp; temp = *x; *x = *y; *y = temp; } PrintMatrix(int (*a)[N], int n) { int i,j; for(i = 0;i < n ;i++) { for(j = 0;j < n ; j++) { printf("%d\t", *a[i*n + j]); } printf("\n"); } } int main() { int n,s[N][N]; printf("Input n:"); scanf("%d",&n); printf("Input %d*%d matrix:\n",n,n); InputMatrix( s, n); Transpose( s, n); printf("The transposed matrix is:\n"); PrintMatrix( s, n); return 0; } ``` 请问哪里错了？该怎么改？

mpi并行计算矩阵转置时间远慢于串行 为什么

【C语言】有关数组转置与指针应用的题目，求大佬解答

C语言：运用指针，输出3*3矩阵的转置阵。大佬们帮忙看看哪里出问题了

``` #include "stdafx.h" #include <stdio.h> int _tmain(int argc, _TCHAR* argv[]) { void fun(int *x); int a[3][3],i; int *p=&a[0][0]; printf("请输入一个整形矩阵:"); for(i=0;i<3;i++) { scanf("%d %d %d",&a[i][0],&a[i][1],&a[i][2]); } fun(p); printf("输出转置矩阵：\n"); for(i=0;i<3;i++) { printf("%d %d %d\n",a[i][0],a[i][1],a[i][2]); } return 0; } void fun(int *x) { int m,n,s; for(m=0;m<3;m++) { for(n=0;n<3;n++) { s=*(x+3*m+n); *(x+3*m+n)=*(x+3*n+m); *(x+3*n+m)=s; } } } ``` 输入：1 2 3 4 5 6 7 8 9 输出：1 2 3 4 5 6 7 8 9 结果依然是原矩阵，是哪一步出问题了呢？

1. #include<stdio.h> 2. #include<stdlib.h> 3.#include<string.h> 4.void main (void) 5.{ int a[4][4], (*p)[4]; int i=0, j=0,t; for(i=0; i<4; i++) { for(j=0; j<4; j++) { scanf("%d",&a[i][j]); if(j == 3) { printf("\n"); } } } //输入矩阵 for(i=0,j=0,p=a; i<4; i++,j++) { t = *(*(p+i)+j); *(*(p+i)+j) = *(*(p+j)+i); *(*(p+j)+i) = t; } //转置矩阵 for(i=0; i<4; i++) { for(j=0; j<4; j++) { printf("%5d",a[i][j]); if(j == 3) { printf("\n"); } } } //输出矩阵 system("pause"); return 0; }

“亚马逊丛林里的蝴蝶扇动几下翅膀就可能引起两周后美国德州的一次飓风……” 这句人人皆知的话最初用来描述非线性系统中微小参数的变化所引起的系统极大变化。 而在更长的时间尺度内，我们所生活的这个世界就是这样一个异常复杂的非线性系统…… 水泥、穹顶、透视——关于时间与技艺的蝴蝶效应 公元前3000年，古埃及人将尼罗河中挖出的泥浆与纳特龙盐湖中的矿物盐混合，再掺入煅烧石灰石制成的石灰，由此得来了人...

loonggg读完需要3分钟速读仅需 1 分钟大家好，我是你们的校长。我之前讲过，这年头，只要肯动脑，肯行动，程序员凭借自己的技术，赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

MySQL数据库面试题（2020最新版）

HashMap底层实现原理，红黑树，B+树，B树的结构原理 Spring的AOP和IOC是什么？它们常见的使用场景有哪些？Spring事务，事务的属性，传播行为，数据库隔离级别 Spring和SpringMVC，MyBatis以及SpringBoot的注解分别有哪些？SpringMVC的工作原理，SpringBoot框架的优点，MyBatis框架的优点 SpringCould组件有哪些，他们...

《经典算法案例》01-08：如何使用质数设计扫雷（Minesweeper）游戏

《Oracle Java SE编程自学与面试指南》最佳学习路线图（2020最新版）