实验五:稀疏矩阵的存储和快速转置

来源:互联网 发布:不如我哋由头嚟过知乎 编辑:程序博客网 时间: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();}

原创粉丝点击