- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
稀疏矩阵运算报告
数据结构作业报告
——稀疏矩阵运算报告
姓名:
班级:
学号:
摘要
利用三元数组随机生成并建立和输出矩阵,在利用法则进行矩阵的加减乘等运算。为了计算方便,这里的矩阵都是稀疏矩阵,利用三元数组进行存储。通过这个我熟悉了稀疏矩阵。
程序主要包括随机生成矩阵,输出矩阵,矩阵加法,矩阵减法,矩阵乘法五个子函数。
内容
M,N为存贮参与运算的稀疏矩阵的三元组表,m,n为存贮参与运算的稀疏矩阵的二维数组。Num二维数组用来存贮满矩阵算法的运算结果,Q三元组表用力存贮稀疏矩阵运算算法的运算结果。
CreateM、CreateN函数生成随机矩阵。通过从键盘输入参与运算的矩阵的行数、列数、非零元个数,通过rand函数随机选择矩阵的行列,填入随机数值生成稀疏矩阵。在首先是用二维数组存贮矩阵后,按先行后列的顺序遍历矩阵的每一个元素,取出其中的非零元存贮进三元组表中。
Add函数为稀疏矩阵的加法和满矩阵的加法。稀疏矩阵的加法,是通过设置两个指针变量,分别指向M和N三元组的第一个非零元,不断比较两个指针变量所指向的非零元的行数、列数信息,将情况分为两个非零元的行列相等,行相等但列数MN,行相等但列数MN,列相等但行数MN, 列相等但行数MN等几种情况,分别将指针变量所指向的非零元的数值或相加放入Q中存贮,或直接放入Q中存贮.然后再根据不同的情况,分别将两个指针变量指向下一个非零元。满矩阵加法算法不再赘述。
Sub函数为稀疏矩阵的减法和满矩阵的减法。过程与加法函数基本相当,这里不再赘述。
Mult函数为稀疏矩阵的乘法和满矩阵的乘法。稀疏矩阵的乘法是使用了带行逻辑信息的三元组的方法,即每次循环从左边的稀疏矩阵中每行的第一个非零元(从rops值中可以直接获知)到每行的最后一个非零元(从下一行的rops值可以获知),依次乘以右边的稀疏矩阵中每一列相对应的非零元,然后按行列信息依次存贮进Q中。依次去边M矩阵的每一行和N矩阵的每一列后,Q中即存储了矩阵相乘的结果。满矩阵的乘法算法不再赘述。
PrintMatrix函数为输出函数。设置双重循环遍历矩阵的各行各列,若在三元数组中存在该行该列的非零元,则输出该非零元,否则输出零。
程序执行结果
第一次运行结果:
第二次运行结果:
第三次运行结果:
备注:为了截图方便,程序输出的排版尽量紧凑了点。
结论
本程序思路基本正确,运行结果合法的,可以满足稀疏矩阵的加减乘及检验的作用。
编程中遇到的问题以及解决方法
1.函数多次在乘法中崩溃,后发现是生成矩阵时未输入rops值,补充每行的rops值后即可。
2.三元组表形式的稀疏矩阵无法正确的转换成矩阵的形式输出,后发现是三元组表中的数据非有序导致。改变生成矩阵的方法,先填充二维数组再转换成三元组表即可。
附录
#include stdafx.h
#include stdio.h
#include time.h
#include stdlib.h
int m[1000][1000],n[1000][1000],num[1000][1000];
typedef struct{
int i,j;
int e;
}Triple;
typedef struct
{
Triple data[10000];
int rpos[10000];
int mu,nu,tu;
}Matrix;
void CreateM(Matrix *T)
{
int k,i1,j1,rop;
printf( \n请输入矩阵行数、列数及非零元个数: );
scanf(%d%d%d,T-mu,T-nu,T-tu);
printf(\n);
for (i1=0;i1T-mu;i1++)
for (j1=0;j1T-nu;j1++)m[i1][j1]=0;
for (k=1;k=T-tu;)
{
i1=rand()%T-mu;
j1=rand()%T-nu;
if (m[i1][j1]==0)
{
m[i1][j1]=1+rand()%10;
k++;
}
}
k=1;
for (i1=0;i1T-mu;i1++)
{
rop=0;T-rpos[i1]=T-tu+1;
for (j1=0;j1T-nu;j1++)
{
if (m[i1][j1]!=0)
{
if (rop==0){T-rpos[i1]=k;printf(k=%d ,k);}
T-data[k].i=i1;
T-data[k].j=j1;
T-data[k].e=m[i1][j1
您可能关注的文档
最近下载
- 全面预算管理操作实施手册汇总.pdf VIP
- 空调安装质量保证措施和创优计划.docx VIP
- 2025陕西延长石油(集团)有限责任公司招聘(1881人)笔试备考题库及参考答案详解一套.docx VIP
- 汉字的“六书”理论.ppt VIP
- 高考语文作文的命题趋势研究.pptx VIP
- Rexroth力士乐电动缸EMC说明书.pdf VIP
- 2008年修电脑1400张照片连接.docx VIP
- 2023年重庆小升初一三八巴蜀育才巴川入学考试宝典及语文、数学试题.doc VIP
- 2025年5月新高考语文全国Ⅰ卷各地模考试题汇编之古代诗歌鉴赏.docx VIP
- 吹瓶机安全操作规程培训.pptx VIP
文档评论(0)