数据结构(四)---稀疏矩阵转三元组的相关操作

稀疏矩阵转三元矩阵的相关操作

最近学完数据结构里面的矩阵的相关操作,在之前的矩阵的存储和操作中,就是简单的用多维数组进行存储,然后进行相关的操作。但是,这样如果一个矩阵面的有效元素只是占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<=
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值