稀疏矩阵的存储方式,以及转换算法等
1)三元组顺序表存储矩阵元素方法
#define MAXSIZE 12500
typedef struct
{
int i,j;
ElemType e;
} Triple;
typedef struct
{
vector<Triple*> data[MAXSIZE+1];
int mu,nu,tu;
}TSMatrix;
2)矩阵的转置算法
void matrix_turn(const TSMatrix& m1,TSMatrix& m2)
{
vector<int> num(m1.nu,0);
vector<int>col(m1.nu,0);
for(int i=0;i<m1.tu;i++)
{
++num[m1.data[i].j]//获得每一列存在多少个非零元素
}
for(int n=1;n<m1.nu;++n)
{
col[n]=col[n-1]+num[n-1];
}
for(int m=0;m<m1.tu;++m)
{
Triple* ptr=(Triple*)malloc(sizeof(Triple));
ptr->j=m1.data[m]->i;
ptr->i=m1.data[m]->j;
m2.data[col[ptr->j]]=ptr;
++col[ptr->j];
}
}
3)矩阵的十字链表存储方法
浙公网安备 33010602011771号