1. 程式人生 > >C語言資料結構——稀疏矩陣的快速轉置

C語言資料結構——稀疏矩陣的快速轉置

#include<stdio.h>
#include<stdlib.h>
#include<stdarg.h>

#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; }