您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 实验5稀疏矩阵三元组表的操作
实验五稀疏矩阵三元组表的操作科目:数据结构实验和课程设计班级:09计科一班姓名:杨丹学号:2009110158实验目的:会定义稀疏矩阵的三元组表。熟悉C语言程序的基本结构,掌握程序中的用户头文件、文件之间的相互关系及各自的作用。熟悉对稀疏矩阵的三元组表的一些基本操作和具体的函数定义。熟悉C语言操作环境的使用以及多文件程序的输入、编辑、调试和运行的全过程。实验要求:认真阅读和掌握本实验内容所给的全部程序。保存和输出程序运行结果,并结合程序进行分析。按照你对稀疏矩阵的三元组表操作的需要,编写程序代码然后运行,给出运行结果。实验设备:每人一台安装VC6.0编写软件的计算机,公用打印机。注意事项:要在硬盘上建立好自己的工作目录,专门用来存储自己所做的实验程序及相关数据,以后每次做实验最好仍采用这个目录。认真编写算法及运行结果,针对本实验的具体算法,认真写出算法分析。实验步骤:#includeiostream.h//稀疏矩阵三元组表的操作#definemaxsize64typedefintelemtype;structnode{intr,c;elemtyped;};structts{introws,cols,nums;nodedata[maxsize];};voidcreate(ts&a);//稀疏矩阵三元组表的建立voiddisp(tsa);//显示稀疏矩阵三元组表的内容voidtrants(tsa,ts&at);//求稀疏矩阵的转置voidadd(tsa,tsb,ts&c);//求两稀疏矩阵的和voidmain(){tsa;create(a);//稀疏矩阵三元组表的建立disp(a);//显示稀疏矩阵三元组表的内容tsat;trants(a,at);//求稀疏矩阵的转置disp(at);//显示转置矩阵的内容tsb;create(b);disp(b);//稀疏矩阵三元组表的建立tsc;add(a,b,c);//求两稀疏矩阵的和disp(c);//显示两稀疏矩阵和的内容}voidcreate(ts&a)//稀疏矩阵三元组表的建立{inti;cina.rowsa.colsa.nums;for(i=0;ia.nums;i++){cina.data[i].ra.data[i].ca.data[i].d;}}voiddisp(tsa)//显示稀疏矩阵三元组表的内容{couta.rowsa.colsa.nums;for(inti=0;ia.nums;i++)couta.data[i].d;}voidtrants(tsa,ts&at)//求稀疏矩阵的转置{intp,q=0,v;at.rows=a.rows;at.cols=a.cols;at.nums=a.nums;if(a.nums!=0){for(v=0;va.nums;v++)for(p=0;pa.nums;p++)if(a.data[p].c==v){at.data[q].r=a.data[p].c;at.data[q].c=a.data[p].r;at.data[q].d=a.data[p].d;q++;}}}voidadd(tsa,tsb,ts&c)//求两稀疏矩阵的和{inti=0,j=0,k=0;elemtypev;if(c.rows==a.rows&&c.cols==a.cols)while(ia.nums&&jb.nums){if(a.data[i].r==b.data[j].r){if(a.data[i].cb.data[j].c){c.data[k].r=a.data[i].r;c.data[k].c=a.data[i].c;c.data[k].d=a.data[i].d;k++;i++;}elseif(a.data[i].cb.data[j].c){c.data[k].r=b.data[j].r;c.data[k].c=b.data[j].c;c.data[k].d=b.data[j].d;k++;j++;}else{v=a.data[i].d+b.data[j].d;if(v!=0){c.data[k].r=a.data[i].r;c.data[k].c=a.data[i].c;c.data[k].d=v;k++;}i++;j++;}}elseif(a.data[i].rb.data[j].r){c.data[k].r=a.data[i].r;c.data[k].c=a.data[i].c;c.data[k].d=a.data[i].d;k++;i++;}else{c.data[k].r=b.data[j].r;c.data[k].c=b.data[j].c;c.data[k].d=b.data[j].d;k++;j++;}c.nums=k;}}试验分析:创建稀疏矩阵三元表时,即描述数组的存储过程,用rows,cols,nums分别代表稀疏矩阵的行数,列数,非零个数,用r,c,d分别代表稀疏矩阵的非零元素的行号,列号,数值。依次输出各元素值。显示稀疏矩阵三元表的内容时,即输出三元组a,从头扫描三元组a,依次输出元素值。求矩阵的转置,对于一个m*n的矩阵,其转置矩阵是一个n*m的矩阵,即转置后的矩阵的行是原矩阵的列,转置后矩阵的列是原矩阵的行,其非零数的个数与原矩阵的非零数相同,转置后先保存原矩阵的列。求两稀疏矩阵的和时,用i和j作为两个三元组的指针,以行序对它们的当前值进行相加运算,当行数和列数不相等时不能进行加法运算,若相等,再比较两矩阵,如果矩阵a和b相加等于0,则不加,只将不为0的结果添加到c中。否则,当行号相等时候,列也相等时,则把a与b中元素的和添加到c中,若列不相等,则把a,b中最小的矩阵元素赋添加到c中。当行号不相等时候,则把a,b中最小的矩阵元素添加到c中
本文标题:实验5稀疏矩阵三元组表的操作
链接地址:https://www.777doc.com/doc-2457318 .html