输出稀疏矩阵并相乘

本文介绍了如何以三元组形式存储稀疏矩阵,并详细阐述了如何实现稀疏矩阵的相乘操作。针对非零元素个数远小于矩阵总元素的情况,通过存储非零元素及其对应的行、列下标来优化存储。文章包括问题描述、问题分析以及具体的代码实现,包括头文件、实现文件和测试文件的内容。
摘要由CSDN通过智能技术生成

一、问题描述:

以三元组形式存储稀疏矩阵,实现矩阵相乘。

二、问题分析:

当一个阶数较大的矩阵中的非零元素个数s相对于矩阵元素的总个数t非常小时,即s<<t,称该矩阵为稀疏矩阵。以三元组形式存储稀疏矩阵的存储方法是:只存储非零元素。由于稀疏矩阵中非零元素的分布没有任何规律,所以在存储非零元素时必须同时存储非零元素对应的行下标、列下标和元素值。这样稀疏矩阵中的每一个非零元素由一个三元组(I,j,aij)唯一确定,稀疏矩阵中所有非零元素构成三元组线性表。

三、代码实现:

1、头文件

#ifndef __MY_BITREE_H_
#define __MY_BITREE_H_

#include <stdio.h>
#include <stdlib.h>

//函数结果状态码
#define OK        1
#define ERROR     0
#define OVERFLOW -1 
//Status是函数的类型,其值是函数结果状态代码

typedef int Status;//整型数表示状态
typedef int Elemtype;

// ----- 稀疏矩阵的三元组顺序表存储表示 -----
#define MaxSize 100                      //假设非零元个数的最大值为100
#define L   10
typedef struct {
    int r;           //行号
    int c;           //列号
    Elemtype d;      //非零元素值
}Triple;
typedef struct {
    Triple data[MaxSize + 1];        //非零元三元组表,data[0]未用
    int    rpos[L + 1];             //各行的第一个非零元的位置表 
    int rows;                      //行数值
    int cols;                     //列数值
    int nums;                    //非零元素个数 
}RLSMatrix;

Status CreateSMatrix(RLSMatrix& M);                            //创建稀疏矩阵M,采用三元组存储
Status PrintSMatrix(RLSMatrix &M);                              //输出稀疏矩阵M
void DispMat(RLSMatrix& M);                                     //输出稀疏矩阵M的三元组
void TranMat(RLSMatrix M, RLSMatrix *&T);                      //求三元数组表示t的转置矩阵tb
int getvalue(RLSMatrix t, int i, int j);                       //返回三元组t表示的值
bool Mat
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值