数组的实现及操作:
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int ElemType;
typedef struct ...{
int i,j;
ElemType e;
}Triple;

typedef struct ...{
Triple data[MAXSIZE];
int mu,nu,tu;
}TSMatrix;
//利用二维数据创建一个三元组顺序表
int CreatMatrix(int array[][3],TSMatrix *m)
...{
int q=0;
m->mu=3;
m->nu=3;
for(int row=0;row<3;row++)
...{
for(int col=0;col<3;col++)
...{
if(array[row][col])
...{
m->data[q].e=array[row][col];
m->data[q].i=row;
m->data[q].j=col;
q++;
}
}
}
m->tu=q;
return OK;
}
/**//*
int CreatMatrix(int *array,int rownum,int colnum,TSMatrix *m)
{
int q=0;
m->mu=rownum;
m->nu=colnum;
for(int row=0;row<rownum;row++)
{
for(int col=0;col<colnum;col++)
{
if(*array!=0)
{
m->data[q].e=*array;
m->data[q].i=row;
m->data[q].j=col;
q++;
}
array++;
}
}
m->tu=q;
return OK;
}
*/
//转置
int TransposeMatrix(TSMatrix m,TSMatrix &t)
...{
int q=0;
t.mu=m.nu;
t.nu=m.mu;
t.tu=m.tu;
if(t.tu)
...{
for(int col=0;col<m.nu;col++)
for(q=0;q<m.tu;q++)
if(m.data[q].j==col)
...{
t.data[q].i=m.data[q].j;
t.data[q].j=m.data[q].i;
t.data[q].e=m.data[q].e;
++q;
}
}
return OK;
}
//输出元素
void PrintMatrix(TSMatrix m)
...{
for(int c=0;c<m.tu;c++)
...{
printf("%d,%d is :%d ",m.data[c].i+1,m.data[c].j+1,m.data[c].e);
}
}
int main(int agrc,char *argv[])
...{
int array[3][3]=...{...{0,0,1},...{0,2,3},...{4,0,0}};
TSMatrix m,n;
CreatMatrix(array,&m);
// CreatMatrix(*array,3,3,&m);
// CreatMatrix(array[0],3,3,&m);
TransposeMatrix(m,n);
PrintMatrix(m);
printf("after transport .... ");
PrintMatrix(n);
printf(" ");
}
本文介绍了一种使用三元组表示稀疏矩阵的方法,并通过示例代码展示了如何创建稀疏矩阵及其转置过程。此外,还提供了一个输出矩阵元素的函数。

被折叠的 条评论
为什么被折叠?



