实验五:稀疏矩阵的存储和快速转置
来源:互联网 发布:不如我哋由头嚟过知乎 编辑:程序博客网 时间:2024/04/28 02:49
#include<stdio.h>#include<malloc.h>#define OK 1#define ERROR 0#define MAXSIZE 1250#define MAXRC 200typedef 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();}