學習筆記------資料結構(C語言版)陣列之三元組順序表
阿新 • • 發佈:2019-01-05
//TSMatrix.cpp
#include"predefined.h" #include"TSMatrix.h" Status TransposeSMatrix(TSMatrix M,TSMatrix *T) //演算法5.1:採用三元組表儲存表示,求稀疏矩陣M的轉置矩陣T { int q,p,col; (*T).mu=M.mu; (*T).nu=M.nu; (*T).tu=M.tu; if(M.tu) { q=1; for(col=1;col<=M.nu;col++) for(p=1;p<=M.tu;p++) if(M.data[p].j==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; q++; } } return OK; } Status FastTransposeSMatrix(TSMatrix M,TSMatrix *T) //演算法5.2:採用三元順序表儲存表示,求稀疏矩陣M的轉置矩陣T { int num[10],cpot[10],t,p,col,q; (*T).mu=M.mu; (*T).nu=M.nu; (*T).tu=M.tu; if(M.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]=num[col-1]+cpot[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; } Status CreateSMatrix(TSMatrix *M) //建立稀疏矩陣 { int i,m,n; ElemType e; printf("請輸入矩陣的行、列、非零元個數:"); scanf("%d,%d,%d",&(*M).mu,&(*M).nu,&(*M).tu); for(i=1;i<=(*M).tu;i++) { printf("請按行序順序輸入第%d個非零元素所在的行(1~%d),列(1~%d),元素值:",i,(*M).mu,(*M).nu); scanf("%d,%d,%d",&m,&n,&e); (*M).data[i].i=m; (*M).data[i].j=n; (*M).data[i].e=e; } return OK; } void PrintSMatrix(TSMatrix M) //列印稀疏矩陣 { int i; printf("%d行%d列%d個非零元素。\n",M.mu,M.nu,M.tu); printf("行 列 元素值\n"); for(i=1;i<=M.tu;i++) printf("%2d%4d%8d\n",M.data[i].i,M.data[i].j,M.data[i].e); }
//TSMatrix.h
#define MAXSIZE 12500 typedef int ElemType; typedef struct { int i,j; ElemType e; }Triple; typedef struct { Triple data[MAXSIZE+1];//date[0]未用 int mu,nu,tu; }TSMatrix; Status TransposeSMatrix(TSMatrix M,TSMatrix *T); Status CreateSMatrix(TSMatrix *M); void PrintSMatrix(TSMatrix M); Status FastTransposeSMatrix(TSMatrix M,TSMatrix *T);