您的位置:首页 > 理论基础 > 数据结构算法

稀疏矩阵的数据结构及相关算法

2015-12-06 21:54 369 查看

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: