因为这里的M*N小于12500,所以就把12500开根号取111;
代码如下:
```c
#include#define M 111
#define N 111
#define MaxSize 12500
typedef struct
{
int r;//行号
int c;//列号
int d;//元素值
}TupNode; //三元组类型
typedef struct
{
int rows;//行数
int cols;//列数
int nums;//非零元素的个数
TupNode data[MaxSize];
}TSMatrix; //三元组顺序表的类型
void CreateMat(TSMatrix *t);
void DispMat(TSMatrix *t);
void TranTat(TSMatrix t, TSMatrix *tb);
int main()
{
TSMatrix t,tb;
CreateMat(&t);
TranTat(t, &tb);
DispMat(&tb);
return 0;
}
/*从一个二维稀疏矩阵创建其三元组*/
void CreateMat(TSMatrix *t)
{
int m, n,a[M][N],i,j;
scanf("%d%d", &m, &n);
t->rows = m; t->cols = n; t->nums = 0;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
scanf("%d", &a[i][j]);
if (a[i][j] != 0)
{
t->data[t->nums].r = i;
t->data[t->nums].c = j;
t->data[t->nums].d = a[i][j];
t->nums++;
}
}
}
}
/*输出稀疏矩阵*/
void DispMat(TSMatrix *t)
{
int k= 0;
for (int i = 0; i < t->rows; i++)
{
for (int j = 0; j < t->cols; j++)
{
if (t->data[k].r == i&&t->data[k].c == j)
{
printf("%d ", t->data[k].d);
k++;
}
else
printf("%d ",0);
}
printf("\n");
}
}
/*稀疏矩阵的转置*/
void TranTat(TSMatrix t, TSMatrix *tb)
{
int v, k, k1 = 0;
tb->rows = t.cols; tb->cols = t.rows; tb->nums = t.nums;
for (v = 0; v < t.cols; v++)
{
for (k = 0; k < t.nums; k++)
{
if (t.data[k].c == v)
{
tb->data[k1].r = t.data[k].c;
tb->data[k1].c = t.data[k].r;
tb->data[k1].d = t.data[k].d;
k1++;
}
}
}
}
```