#include<iostream> #define MAX 1000 using namespace std; typedef struct Elem{ int row,col,value; }Elem; typedef struct Matrix{ Elem elems[MAX+1]; int m,n,len; }Matrix; int position[MAX];//每行开头元素的位置 int num[MAX];//每行的元素个数 Matrix *S=(Matrix*)malloc(sizeof(Matrix)); Matrix *D=(Matrix*)malloc(sizeof(Matrix)); //创建稀疏矩阵 void CreateMatrix(Matrix *M) { int row,col,value,count=1,m,n,len; cout<<"输入矩阵行数,列数,元素个数\n"; cin>>m>>n>>len; M->m=m;M->n=n;M->len=len; while(cin>>row>>col>>value&&row!=0&&col!=0&&value!=0) { M->elems[count].row=row; M->elems[count].col=col; M->elems[count].value=value; count++; } } //稀疏矩阵转置 void Transfer(Matrix *S) { int col=0,i,q; D->m=S->n;D->n=S->m; D->len=S->len; for(i=1;i<=S->n;i++)num[i]=0; for(i=1;i<=S->len;i++) num[S->elems[i].col]++; position[1]=1; for(i=2;i<=S->n;i++) position[i]=position[i-1]+num[i-1]; for(i=1;i<=S->len;i++) { col=S->elems[i].col; q=position[col]; D->elems[q].col=S->elems[i].row; D->elems[q].row=S->elems[i].col; D->elems[q].value=S->elems[i].value; position[col]++; } } //输出转置后的矩阵 void procOutput() { int i; cout<<"转置后的矩阵\n"; for(i=1;i<=D->len;i++) cout<<D->elems[i].value<<" "; cout<<"\n"; } int main() { char cmd; do{ CreateMatrix(S); Transfer(S); procOutput(); cout<<"继续吗y/Y\n"; cin>>cmd; }while(cmd=='Y'||cmd=='y'); return 0; }