利用三元组表实现矩阵相加

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1内蒙古科技大学信息工程学院计算机系《数据结构与算法》实验报告姓名张燕斌学号1267159206实验成绩班级软件12-2实验日期第10周(星期二)11月4日第7、8节项目号、实验名称3、利用三元组表实现矩阵相加实验要求(任课教师提供)1、该实验要求掌握矩阵的压缩存储和相关的应用;2、验证性实验要求在实验前认真研读相关教材,作好充分的预习准备工作,写出实验预习报告;3、学生必须在规定时间内独立完成,对实验过程中出现的问题,要求尽量做到独立思考,独立解决;4、每次实验的结果必须经过教师认可后,实验方可结束;5、要求学生必须认真对待每一个实验,不得缺席、迟到、早退;6、要求实验中认真做好实验记录,实验后认真完成实验报告;实验内容(由学生填写)#includestdio.h#includemalloc.h#definesmax100typedefstruct{//三元组的结点类型inti,j;//矩阵的行数和列数intv;//非零矩阵元素}node;typedefstruct{//稀疏矩阵的结构类型intm,n,t;//行数,列数,非0元素的个数nodedata[smax];//三元组表2}spmatrix;spmatrix*setmatrix(){//矩阵元素输入函数spmatrix*a;inti;a=(spmatrix*)malloc(sizeof(spmatrix));//申请结点空间printf(请输入矩阵的行数、列数、非零元素的个数:);scanf(%d%d%d,&(a-m),&(a-n),&(a-t));printf(建立三元组:\n);for(i=1;i=a-t;i++)//当i小于三元组表中非0元素的个数时scanf(%d%d%d,&(a-data[i].i),&(a-data[i].j),&(a-data[i].v));returna;}voidadd(spmatrix*A,spmatrix*B,spmatrix*C){//两个三元组相加算法intx,sum,pa,pb,pc;C-m=A-m;//将矩阵A的行数赋给CC-n=A-n;//将矩阵的列数赋给CC-t=0;//将一开始矩阵C的非零元个数定为0个pa=1;//pa,pb,pc分别为矩阵A,B,C的三元组下标pb=1;pc=1;for(x=1;x=A-m;x++)3//当x小于等于行数时,x++{while(A-data[pa].ix)//当A的行数小于x时,pa加1pa++;while(B-data[pb].ix)//当B的行书小于X时,pb加1pb++;while(A-data[pa].i==x&&B-data[pb].i==x)//在行数相等的情况下{if(A-data[pa].j==B-data[pb].j)//当列数相等时{sum=A-data[pa].v+B-data[pb].v;//矩阵相加if(sum!=0)//当相加不为零时{C-data[pc].i=x;//把x赋值给矩阵c的行数C-data[pc].j=A-data[pa].j;//把矩阵A的列数赋值给C的列数C-data[pc].v=sum;//把两矩阵想加的和赋值给Cpa++;//下标加一pb++;pc++;4}}else//当列数不相等时if(A-data[pa].jB-data[pb].j)//A的列数大于B的列数时{C-data[pc].i=x;C-data[pc].j=B-data[pb].j;C-data[pc].v=B-data[pb].v;pb++;pc++;}else//A的列数小于B的列数时{C-data[pc].i=x;C-data[pc].j=A-data[pa].j;C-data[pc].v=A-data[pa].v;pa++;pc++;}}while(B-data[pb].i==x)//插入B的元素5{C-data[pc].i=x;C-data[pc].j=B-data[pb].j;C-data[pc].v=B-data[pb].v;pb++;pc++;}}C-t=pc-1;}intmain(){spmatrix*a,*b,*c;inti;c=(spmatrix*)malloc(sizeof(spmatrix));a=setmatrix();printf(所得的三元组A如下:\n);for(i=1;i=a-t;i++)printf((%d,%d,%d)\n,a-data[i].i,a-data[i].j,a-data[i].v);printf();b=setmatrix();printf(所得的三元组B如下:\n);for(i=1;i=b-t;i++)printf((%d,%d,%d)\n,b-data[i].i,b-data[i].j,b-data[i].v);printf();add(a,b,c);printf(输出相加所得的三元组c:\n);for(i=1;i=c-t;i++)printf(%d,%d,%d\n,c-data[i].i,c-data[i].j,c-data[i].v);printf(\n);6return0;}7评语(由教师填写)说明:1、每个实验项目填写一份实验报告,电子版命名方式为:学号姓名项目号.doc。例如:1167111182张三3.doc表示张三做的第3个项目的实验报告。2、实验报告电子版应该在实验后一周内由学习委员收齐后存放在一个文件夹下,文件夹命名方式为:软件12-1班3,表示软件12-1班第3个项目的实验报告,压缩。第一时间发送给任课教师。必须以班级为单位上交。3、任课教师要求在收到实验报告的一周内进行批阅,并给出成绩及评语。4、实验报告电子版由任课教师保存。5、表格宽度可以根据实际情况伸缩。

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功