#include<stdio.h>
#include<malloc.h>
#define OK 1
#define ERROR 0
#define MAXSIZE 1250
#define MAXRC 200
typedef int ElemType; /* 元素的类型?*/
typedef struct{
int i; /*元素的行*/
int j; /* 元素的列 */
ElemType e; /* 元素的值 */
}Triple; /* 定义三元组结构类型 */
typedef struct{
Triple data[MAXSIZE+1]; /* 非零元三元组,data[0]未用 */
int mu; /* 矩阵的总行数 */
int nu; /* 矩阵的总列数 */
int tu; /* 非零元总个数 */
}TSMatrix; /* 定义三元组表类型 */
void CreateTSMatrix(TSMatrix *Matrix) /* 创建矩阵的三元组表 */
{
int k;
printf("ju zhen de hang shu: mu=");
scanf("%d",&Matrix->mu);
printf("ju zhen de lie shu: nu=");
scanf("%d",&Matrix->nu);
printf("ju zhen de ge shu: tu=");
scanf("%d",&Matrix->tu);
printf("Please input san yuan zu biao: \n");
for(k=1;k<=Matrix->tu;k++)
{
scanf("%d%d%d",&Matrix->data[k].i,
&Matrix->data[k].j,&Matrix->data[k].e);
}
}
void DispTSMatrix(TSMatrix Matrix)
{
int k;
for(k=1;k<=Matrix.tu;k++)
{
printf(" %d %d %d\n",Matrix.data[k].i,Matrix.data[k].j,
Matrix.data[k].e);
}
}
int FastTransposeSMatrix(TSMatrix M,TSMatrix *T)
{
int p,q,col,t;
int *num;
int *cpot;
T->mu=M.nu;
T->nu=M.mu;
T->tu=M.tu;
num=(int *)malloc((M.nu+1)*sizeof(int));
cpot=(int *)malloc((M.nu+1)*sizeof(int));
if(T->tu)
{
for(col=1;col<=M.nu;++col)
num[col]=0;
for(t=1;t<M.tu;++t)
++num[M.data[t].j];
cpot[1]=1;
for(col=2;col<=M.nu;++col)
cpot[col]=cpot[col-1]+num[col-1];
for(p=1;p<=M.tu;++p)
{
col=M.data[p].j;
q=cpot[col];
T->data[q].i=M.data[p].j;
T->data[q].j=M.data[p].i;
T->data[q].e=M.data[p].e;
++cpot[col];
}
}
else
return ERROR;
return OK;
}
int main()
{
TSMatrix M;
TSMatrix T;
printf("chuang jian ju zhen M: \n");
CreateTSMatrix(&M);
printf("ju zhen de san yuan biao ru xia: \n");
DispTSMatrix(M);
getch();
FastTransposeSMatrix(M,&T);
printf("zhuan zhi hou de ju zhen: \n");
DispTSMatrix(T);
getch();
}