稀疏矩陣的資料結構及相關演算法
阿新 • • 發佈:2019-01-22
1三元組順序表
資料結構:
typedef struct{
int i,j; //非零元的行下標和列下標
ElemType e;
}Triple;
typedef struct{
Triple data[MAXSIZE+1]; //非零元三元組表,data[0]未用
int mu,nu,tu; //矩陣的行數、列數和非零元個數
}TSMatrix;
矩陣的轉置
(1)
Status TransposeSMatrix(TSMatrix M,TSMatrix &T){
T.mu =M.nu; T.nu=M.mu; T.tu=M.tu;
if(T.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;
}
(2)快速轉置
附設兩個向量num和cpot, num[col]表示矩陣M中第col列中非零元的個數,cpot[col]指示M中第col列的第一個非零元在轉置後的三元順序組中的位置。
有 cpot[1]=1;
cpot[col]=cpot[col-1]+num[col-1];
Status FastTransposeSMatrix(TSMatrix M,TSMatrix &T){
T.mu =M.nu; T.nu=M.mu; T.tu=M.tu;
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];
}
}
return OK;
}