随机产生一个以三元顺序表储存的稀疏矩阵,并对其进行转置
时间: 2024-05-11 08:17:36 浏览: 100
好的,我可以帮您实现这个操作。下面是代码实现:
```
#include<iostream>
using namespace std;
#define maxSize 100
typedef struct
{
int i,j;//非零元的行下标和列下标
int val;//非零元素的值
}Triple;
typedef struct
{
Triple data[maxSize+1];//非零元三元组表,data[0]未用
int m,n,t; //矩阵的行数、列数、非零元个数t
}TSMatrix;
int TransposeSMatrix(TSMatrix M,TSMatrix &T)
{
T.m=M.n; T.n=M.m; T.t=M.t;//行列交换,非零元个数不变
if(T.t)
{
int q=1;
for(int col=1; col<=M.n; col++)
{
for(int p=1; p<=M.t; p++)
{
if(M.data[p].j==col)//找到第col列的非零元
{
T.data[q].i=M.data[p].j;
T.data[q].j=M.data[p].i;
T.data[q].val=M.data[p].val;
q++;
}
}
}
}
return 1;
}
int main()
{
TSMatrix M,T;
M.m=3,M.n=4,M.t=5;
M.data[1].i=1,M.data[1].j=2,M.data[1].val=1;
M.data[2].i=1,M.data[2].j=3,M.data[2].val=2;
M.data[3].i=1,M.data[3].j=4,M.data[3].val=3;
M.data[4].i=2,M.data[4].j=4,M.data[4].val=4;
M.data[5].i=3,M.data[5].j=1,M.data[5].val=5;
TransposeSMatrix(M,T);
cout<<"原矩阵:\n";
for(int row=1; row<=M.m; row++)
{
for(int col=1; col<=M.n; col++)
{
int k=0;
for(int p=1; p<=M.t; p++)
{
if(M.data[p].i==row&&M.data[p].j==col)
{
k=M.data[p].val;
break;
}
}
cout<<k<<" ";
}
cout<<endl;
}
cout<<"转置矩阵:\n";
for(int row=1; row<=T.m; row++)
{
for(int col=1; col<=T.n; col++)
{
int k=0;
for(int p=1; p<=T.t; p++)
{
if(T.data[p].i==row&&T.data[p].j==col)
{
k=T.data[p].val;
break;
}
}
cout<<k<<" ";
}
cout<<endl;
}
return 0;
}
```
如果您有任何问题,请随时问我。
阅读全文