一、问题描述:
以三元组形式存储稀疏矩阵,实现矩阵相乘。
二、问题分析:
当一个阶数较大的矩阵中的非零元素个数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