C语言数据结构——稀疏矩阵的快速转置

#include
#include
#include

#define OK 1
#define MAXSIZE 12500

typedef int Status;

typedef struct
{
    int i;
    int j;
    int e;
}Triple;

typedef struct
{
    int mu;
    int nu;
    int tu;
    Triple data[MAXSIZE+1];
}TSMatrix;

Status FastTransposeSMarix(TSMatrix M,TSMatrix &T)
{
    int col,t,p,q;
    char num[200],cpot[200];
    T.mu = M.nu;
    T.nu = M.mu;
    T.tu = M.tu;
    if(T.tu)
    {
        for(col=1;col<=M.tu;++col)
            num[col]=0;
        for(t=1;t<=M.tu;++t)
            ++num[M.data[t].j];
        cpot[1]=1;
        for(col=2;col<=M.tu;++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];
        }   
    }
    return OK;
}

int main()
{
    TSMatrix M;
    TSMatrix T;
    int p,q;
    printf("输入原矩阵的行、列和非零元个数:");
    scanf("%d %d %d",&M.mu,&M.nu,&M.tu);
    printf("\n");
    for(p=1;p<=M.tu;++p)
    {
        printf("输入原矩阵的行、列和非零元的值:\n");
        scanf("%d,%d,%d",&M.data[p].i,&M.data[p].j,&M.data[p].e); 
    }
    printf("\n");
    FastTransposeSMarix(M,T);
    printf("输出转置后的矩阵的行、列和非零元个数:%d %d,%d\n",T.mu,T.nu,T.tu);
    for(q=1;q<=T.tu;++q)
        printf("输出转置后的行、列和非零元的值:%d,%d,%d\n",T.data[q].i,T.data[q].j,T.data[q].e);
    return OK;
} 

你可能感兴趣的:(数据结构,c语言,稀疏矩阵的快速转置)