//稀疏矩阵的三元组顺序表存储 #define MAXSIZE 125 //非零元个数的最大值 typedef int ElemType; typedef struct//三元组节点 { int i,j;//非零元的行下标、列下标 ElemType e;//矩阵的元素值。 '..
}Triple; typedef struct { Triple data[MAXSIZE+1];//非零元数组,data[0]不用。 int mu,nu,tu;//矩阵的行数、列数、非零元个数。 }TSMatrix; //-------稀疏矩阵的操作函数-------// void CreateSMatrix(TSMatrix *M) //以行为主序,创建稀疏矩阵 { char sign='y'; int tu; (*M).tu=0;(*M).mu=0;(*M).nu=0; printf(\"请输入矩阵的行数:\\n\"); scanf(\"%d\ printf(\"请输入矩阵的列数:\\n\"); scanf(\"%d\ while(sign=='y') { ++(*M).tu; '.
.
tu=(*M).tu; printf(\"请输入第%d个非零元\\n\ printf(\"\\n请输入行号:\"); scanf(\"%d\ printf(\"\\n请输入列号:\"); scanf(\"%d\ printf(\"\\n请输入元素值:\"); scanf(\"%d\ printf(\"\\n\\n如果继续输入其他非零元素,请输入字母'y',否则请输入'n' : \"); scanf(\"%c%c\ } } void PrintSMatrix(TSMatrix *M) { int *p,k,i,j; int mu,nu,tu; mu=(*M).mu;nu=(*M).nu;tu=(*M).tu; p=(int *)malloc((nu+1)*sizeof(ElemType));//用来保存每行元素。 '.
.
for(i=1;i<=mu;i++) { for(k=0;k<=nu;k++) p[k]=0; for(k=1;k<=tu;k++) { if((*M).data[k].i==i) } for(j=1;j<=nu;j++) printf(\"%-5d\ printf(\"\\n\"); } } void TransposeSMatrix(TSMatrix *M,TSMatrix *T) //采用三元组表存储,实现稀疏矩阵的转置。 { int q=1,col=1; (*T).mu=(*M).nu; (*T).nu=(*M).mu; (*T).tu=(*M).tu; for(col=1;col<=(*M).nu;col++) { p[(*M).data[k].j]=(*M).data[k].e; '.
.
for(q=1;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; } } } Source.h #include\"header.h\" void main() { TSMatrix M,T; CreateSMatrix(&M); PrintSMatrix(&M); TransposeSMatrix(&M,&T); printf(\"\\n\\n\"); PrintSMatrix(&T); '.
.
四、实验结果与数据处理 '.
.
五、分析与讨论 以前学过另一种将矩阵转置的方法,现在学习的这种方法更方便,遇到复杂、阶数比较大的有规律的矩阵,存储更省内存。这种方法更具有一般性,能学到这种通用的方法大大减轻了计算量,感觉很好。 六、教师评语 签名: 日期:
成绩 '.