一、 实验目的
熟习使用采用三元组作为存储结构和稀疏矩阵转置算法的实现。
二、实验问题描述
设m×n矩阵中有t个非零元素且t<<m×n。将非零元素所在行、列以及它的值构成一个三元组(i,j,v),然后再按某种规律存储这些三元组,这种方法可以节约存储空间。实现稀疏矩阵转置算法。
三、实验步骤
1、实验问题分析
将三元组按行优先,同一行中列号从小到大的规律排列成一个线性表。采用顺序存储方法存储该表。要惟一的表示一个稀疏矩阵,还需要在存储三元组表的同时存储该矩阵的行、列,为了运算方便,矩阵的非零元素的个数也同时存储。存储的思路实现如下:
#define maxsize 100
typedef struct
{int row,col;//非零元素的行下标和列下标
int e;//非零元素的值
}SPNode;
typedef struct{
SPNode data[maxsize+1]; //data[0] 未用
int m,n,len;//矩阵的行数、列数及非零元素个数
}matrix;//三元组稀疏矩阵
2、功能函数设计
1.矩阵打印模块
用来把矩阵打印在屏幕上,来对比显示矩阵转置。
函数原型为:void matrix_print(const matrix &mtrx)
2.矩阵转置模块
依次扫描a.data,当扫描到一个col列元素时,直接将其放在b.data的pot[col]的位置上,pot[col]加1,pot[col]中始终是下一个col列元素在b.data 中的位置。
函数原型为:void trans(const matrix &a, matrix &b)
浙公网安备 33010602011771号