稀疏矩阵转三元矩阵的相关操作
最近学完数据结构里面的矩阵的相关操作,在之前的矩阵的存储和操作中,就是简单的用多维数组进行存储,然后进行相关的操作。但是,这样如果一个矩阵面的有效元素只是占25%-30%或者低于这个数的时候,这样的矩阵就会被称为稀疏矩阵,如果按照以前的套路进行矩阵的操作,这样的话就比较浪费空间和时间了,所以我们需要三元组。
什么叫三元组
定义:将稀疏矩阵非零元素所在的行、列以及它的值构成一个三元组(i,j,v),然后再按某种规律存储这些三元组,这种方法可以节约存储空间。
简单的来说,就是把稀疏矩阵里面的非0元素的行和列,还有数值这三个值记录下来,弄个表。
三元组的数据结构的定义
就是建立一个三元组的元素数据类型的结构体
然后建立一个三元组的结构体
typedef struct
{
int r; //行号
int c; //列号
int d; //元素值
} TupNode; //三元组定义
typedef struct
{
int rows; //行数
int cols; //列数
int nums; //非零元素个数
TupNode data[MaxSize];
} TSMatrix; //三元组顺序表定义
稀疏矩阵转三元组
思路蛮简单的就是遍历矩阵的数组,只要碰到非0的元素,就把它的行,列,值记载下来。
void CreatMat(TSMatrix &t,int A[M][N]) //从一个二维稀疏矩阵创建其三元组表示
{
int i,j;
t.rows=M;
t.cols=N;
t.nums=0;
for (i=0; i<M; i++)
{
for (j=0; j<N; j++)
if (A[i][j]!=0) //只存储非零元素
{
t.data[t.nums].r=i;
t.data[t.nums].c=j;
t.data[t.nums].d=A[i][j];
t.nums++;
}
}
}
三元组的输出
这个更简单,先判断三元组里面非0元素的个数是否为0,如果是0的话,直接就返回,否的话,就输出呗
void DispMat(TSMatrix t) //输出三元组
{
int i;
if (t.nums<=