资源描述:
《数据结构-稀疏矩阵实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、实验报告课程数据结构实验名称实验四稀疏矩阵学号姓名实验日期:2012/11/12实验四稀疏矩阵实验目的:1.熟悉数组在计算机内存中存储的实现机制;2.熟练并掌握数组的基本运算;3.熟悉并掌握特殊矩阵的压缩存储方法及压缩存储下的矩阵的运算;3.熟悉稀疏矩阵的“三元组表”和“十字链表”存储结构。实验原理:数组的基本算法;矩阵二维下标与数组一维下标的对应关系;矩阵的运算;稀疏矩阵的“三元组表”和“十字链表”存储结构。实验内容:5-18设矩阵A、矩阵B和矩阵C为采用压缩存储方式存储的n阶上三角矩阵,矩阵元素为整数类型,要求:(1)编写实现矩阵加C=A+B的函数;(2)编写实现矩阵乘C=
2、A×B的函数;(3)以下面的数据为测试例子,编写一个主程序进行测试。实验结果:(1)实现矩阵加C=A+B的函数程序为:voidadd(inta[],intb[],intc[],intn){inti;for(i=0;i<=n*(n+1)/2;i++)c[i]=a[i]+b[i];}(2)实现矩阵乘C=A×B的函数程序为:voidprod(inta[],intb[],intc[],intn){inti,j,k,p,q;intsum=0;for(i=1;i<=n;i++)for(j=1;j<=n;j++){if(i<=j){for(k=1;k<=n;k++){if(i<=k)p=k*
3、(k-1)/2+i-1;elsep=n*(n+1)/2;if(j>=k)q=j*(j-1)/2+k-1;elseq=n*(n+1)/2;sum=sum+a[p]*b[q];}c[j*(j-1)/2+i-1]=sum;sum=0;}elsec[n*(n+1)/2]=0;}}(3)主程序为#includevoidadd(inta[],intb[],intc[],intn){inti;for(i=0;i<=n*(n+1)/2;i++)c[i]=a[i]+b[i];}voidprod(inta[],intb[],intc[],intn){inti,j,k,p,q;in
4、tsum=0;for(i=1;i<=n;i++)for(j=1;j<=n;j++){if(i<=j){for(k=1;k<=n;k++){if(i<=k)p=k*(k-1)/2+i-1;elsep=n*(n+1)/2;if(j>=k)q=j*(j-1)/2+k-1;elseq=n*(n+1)/2;sum=sum+a[p]*b[q];}c[j*(j-1)/2+i-1]=sum;sum=0;}elsec[n*(n+1)/2]=0;}}voidprint(inta[],intn){inti,j;for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(i<=j)p
5、rintf("%5d",a[j*(j-1)/2+i-1]);elseprintf("%5d",a[n*(n+1)/2]);}printf("");}}voidmain(){intu[]={1,2,4,3,5,6,0};intv[]={10,20,40,30,50,60,0};intc[7],n=3;add(u,v,c,n);printf("C=A+B=");print(c,n);prod(u,v,c,n);printf("C=A*B=");print(c,n);printf("Thisprogramismadeby");}运行结果为:总结与思考通过此次实验,我掌
6、握了很多矩阵的存储方法和存储结构,熟悉了稀疏矩阵的“三元组表”和“十字链表”存储结构,以及特殊矩阵的压缩存储方法及压缩存储下的矩阵的运算。存储矩阵时,需要按行列下标的顺序存储。