资源描述:
《稀疏矩阵运算器实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、稀疏矩阵运算器一:问题描述:稀疏矩阵是指那些多数元素为零的矩阵。利用稀疏特点进行储存和计算可以大大节省储存空间,提高计算效率。实现一个能进行称稀疏矩阵基本运算的运算器。基本要求:以带逻辑链接信息的三元组顺序表表示稀疏矩阵,实现矩阵相加,相减,相乘的运算。稀疏矩阵的输入形式采用三元组表示。而运算结果的矩阵则用通常的阵列形式列出。测试数据:+=+=*=二概要设计:intCreateSMatrix(TSMatrix&M)操作结果:创建矩阵MvoidDestroySMatrix(TSMatrix&M)初始条件:矩阵M存在操作结果:销毁矩阵M;voidPrintSMatrix(TSMatrixM
2、)初始条件:矩阵M存在操作结果:打印矩阵MintAddSMatrix(TSMatrixM,TSMatrixN,TSMatrix&Q)初始条件:矩阵M,N,Q存在操作结果:矩阵M,N,相加并储存于矩阵QintXSMatrix(TSMatrixM,TSMatrixN,TSMatrix&Q)初始条件:矩阵M,N,Q存在操作结果:矩阵M,N,相减并储存于矩阵QintMultSMatrix(TSMatrixM,TSMatrixN,TSMatrix&Q)初始条件:矩阵M,N,Q存在操作结果:矩阵M,N,相乘并储存于矩阵Q三,详细程序#include"stdafx.h"#include"stdio.
3、h"#include"stdlib.h"#defineMAXSIZE100//非零元个数的最大值structTriple{inti,j;//行下标,列下标inte;//非零元素值};structTSMatrix{Tripledata[MAXSIZE+1];intrpos[MAXSIZE+1];//非零元三元组表,data[0]未用intmu,nu,tu;//矩阵的行数、列数和非零元个数};//bo5-2.cpp三元组稀疏矩阵的基本操作,包括算法5.1(9个)intCreateSMatrix(TSMatrix&M){//创建稀疏矩阵Minti,m,n;inte;intk;printf("
4、请输入矩阵的行数,列数,非零元素数:");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(m<1
5、
6、m>M.mu
7、
8、n<1
9、
10、n>M.nu)//行或列超出范围k=1;if(m11、
12、m==M.data[i-1].i&&n<=M.data[i-1].j)
13、//行或列的顺序有错k=1;}while(k);M.data[i].i=m;M.data[i].j=n;M.data[i].e=e;}return1;}voidDestroySMatrix(TSMatrix&M){//销毁稀疏矩阵MM.mu=0;M.nu=0;M.tu=0;}voidPrintSMatrix(TSMatrixM){//输出稀疏矩阵Minti;printf("%d行%d列%d个非零元素。",M.mu,M.nu,M.tu);printf("行列元素值");for(i=1;i<=M.tu;i++)printf("%2d%4d%8d",M.data[i].i,M.d
14、ata[i].j,M.data[i].e);}intcomp(intc1,intc2)//另加{//AddSMatrix函数要用到inti;if(c115、矩阵M的非零元素首地址Np=&N.data[1];//Np的初值指向矩阵N的非零元素首地址Me=&M.data[M.tu];//Me指向矩阵M的非零元素尾地址Ne=&N.data[N.tu];//Ne指向矩阵N的非零元素尾地址Qh=Qe=Q.data;//Qh、Qe的初值指向矩阵Q的非零元素首地址的前一地址while(Mp<=Me&&Np<=Ne){Qe++;switch(comp(Mp->i,Np->i)){case1:*Qe=*Mp;Mp+