稀疏矩阵 三元组顺序表(顺序解构)

                                                                                                 稀疏矩阵

     稀疏概念:当矩阵中只有很少的非零元素时,并且分布也不规律,非零元素只占20%~30%甚至更少,此矩阵称为稀疏矩阵 

     如果按照传统的存储方式例如数组存储会浪费大量空间(用于存储非零元素 或者相同常数 ),但如果只存储少量的非零元素,而不存储大量的零或者相同常数,从而达到压缩存储的目的。但很多非零元素位置分布没有规律,所以需要添加一些辅助信息,例如行号,列号用于存储位置。稀疏矩阵的压缩存储结构分为两类:三元组顺序表,十字链表。

三元组顺序表
(1)三元组顺序表表示
typedef struct
{
    int data;
    int row,col;
}triple; //数组元素信息,行号,列号,数据信息
typedef struct
{
    triple data[max]; //数组元素
    int rows,cols,nums; //行数,列数,数组元素总数
}trix;
(2)转置运算
1.按列递增转置
#include<stdio.h>
#include<stdlib.h>
#define max 20
typedef struct
{
    int data;
    int row,col;
}triple; //数组元素信息,行号,列号,数据信息
typedef struct 
{
    triple data[max]; //数组元素
    int rows,cols,nums; //行数,列数,数组元素总数
}trix;
void transform(trix *A,trix *B)
{
    int i,j,k;
    B->cols=A->rows; B->rows=A->cols;//转置后行变为列,列变为行
    B->nums=A->nums;
    if(B->nums>0)
    {
        k=1;
        for(i=1;i<=A->cols;i++) //从A的第一列开时找B就会按先行序后列序的方式存储
        for(j=1;j<=A->nums;j++) //从第一个元素开始找到满足的元素
        if(A->data[j].col==i) //行列,数据交换
        {
            B->data[k].col=A->data[j].row;
            B->data[k].row=A->data[j].col;
            B->data[k].data=A->data[j].data;
            k++;
        }
    }                                             //该算法的时间主要浪费在双从循环中
}
int main(void)
{
    int i,rows,cols,num;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值