稀疏矩阵运算器实验报告.doc
文本预览下载声明
稀疏矩阵运算器
一:问题描述:
稀疏矩阵是指那些多数元素为零的矩阵。利用稀疏特点进行储存和计算可以大大节省储存空间,提高计算效率。实现一个能进行称稀疏矩阵基本运算的运算器。
基本要求:
以带逻辑链接信息的三元组顺序表表示稀疏矩阵,实现矩阵相加,相减,相乘的运算。稀疏矩阵的输入形式采用三元组表示。而运算结果的矩阵则用通常的阵列形式列出。
测试数据:
+ =
+ =
* =
二概要设计:
int CreateSMatrix(TSMatrix M)
操作结果:创建矩阵M
void DestroySMatrix(TSMatrix M)
初始条件:矩阵M存在
操作结果:销毁矩阵M;
void PrintSMatrix(TSMatrix M)
初始条件:矩阵M存在
操作结果:打印矩阵M
int AddSMatrix(TSMatrix M,TSMatrix N,TSMatrix Q)
初始条件:矩阵M,N,Q存在
操作结果:矩阵M,N,相加并储存于矩阵Q
int XSMatrix(TSMatrix M,TSMatrix N,TSMatrix Q)
初始条件:矩阵M,N,Q存在
操作结果:矩阵M,N,相减并储存于矩阵Q
int MultSMatrix(TSMatrix M, TSMatrix N, TSMatrix Q)
初始条件:矩阵M,N,Q存在
操作结果:矩阵M,N,相乘并储存于矩阵Q
三,详细程序
#include stdafx.h
#include stdio.h
#include stdlib.h
#define MAXSIZE 100 // 非零元个数的最大值
struct Triple
{
int i,j; // 行下标,列下标
int e; // 非零元素值
};
struct TSMatrix
{
Triple data[MAXSIZE+1];
int rpos[MAXSIZE+1];// 非零元三元组表,data[0]未用
int mu,nu,tu; // 矩阵的行数、列数和非零元个数
};
// bo5-2.cpp 三元组稀疏矩阵的基本操作,包括算法5.1(9个)
int CreateSMatrix(TSMatrix M)
{ // 创建稀疏矩阵M
int i,m,n;
int e;
int k;
printf(请输入矩阵的行数,列数,非零元素数:);
scanf(%d,%d,%d,M.mu,M.nu,M.tu);
M.data[0].i=0; // 为以下比较顺序做准备
for(i=1;i=M.tu;i++)
{
do
{
printf(请按行序顺序输入第%d个非零元素所在的行(1~%d),列(1~%d),元素值:,i,M.mu,M.nu);
scanf(%d,%d,%d,m,n,e);
k=0;
if(m1||mM.mu||n1||nM.nu) // 行或列超出范围
k=1;
if(mM.data[i-1].i||m==M.data[i-1].in=M.data[i-1].j) // 行或列的顺序有错
k=1;
}while(k);
M.data[i].i=m;
M.data[i].j=n;
M.data[i].e=e;
}
return 1;
}
void DestroySMatrix(TSMatrix M)
{ // 销毁稀疏矩阵M
M.mu=0;
M.nu=0;
M.tu=0;
}
void PrintSMatrix(TSMatrix M)
{ // 输出稀疏矩阵M
int i;
printf(%d行%d列%d个非零元素。\n,M.mu,M.nu,M.tu);
printf(行 列 元素值\n);
for(i=1;i=M.tu;i++)
printf(%2d%4d%8d\n,M.data[i].i,M.data[i].j,M.data[i].e);
}
int comp(int c1,int c2) // 另加
{ // AddSMatrix函数要用到
int i;
if(c1c2)
i=1;
else if(c1==c2)
i=0;
else
i=-1;
return i;
}
int AddSMatrix(TSMatrix M,TSMatrix N,TS
显示全部