数据结构实验报告稀疏矩阵运算.docx

上传人:scccc 文档编号:13949619 上传时间:2022-01-27 格式:DOCX 页数:14 大小:63.86KB
返回 下载 相关 举报
数据结构实验报告稀疏矩阵运算.docx_第1页
第1页 / 共14页
数据结构实验报告稀疏矩阵运算.docx_第2页
第2页 / 共14页
数据结构实验报告稀疏矩阵运算.docx_第3页
第3页 / 共14页
数据结构实验报告稀疏矩阵运算.docx_第4页
第4页 / 共14页
数据结构实验报告稀疏矩阵运算.docx_第5页
第5页 / 共14页
亲,该文档总共14页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《数据结构实验报告稀疏矩阵运算.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告稀疏矩阵运算.docx(14页珍藏版)》请在三一文库上搜索。

1、教学单位计算机科学与技术学生学号5数据结构题 目 稀疏矩阵运算器学生 豹专业名称软件工程指导教师志敏实验目的:深入研究数组的存储表示和实现技术,熟悉广义表存储结构的特性。需要分析: 稀疏矩阵是指那些多数元素为零的矩阵。利用“稀疏”特点进行存储和计算可要求以以大大节省存储空间,提高计算效率。实现一个能进行稀疏矩阵基本运算的运算器。带“行逻辑信息”的三元组顺序表存储稀疏矩阵,实现两矩阵的相加、相减、相乘等运算。输入以三元组表示,输出以通常的阵列形式列出。软件平台:Windows 2000, Visual C 6.0 或 WINTC概要设计:ADT Array 数据对象:D = aij | 0 i

2、b1-1数据关系:R = ROW, COL ROW = | 0COL = | 0基本操作:CreateSMatrix(&M); /0 j b2-1i b1-2, 0j b2-1i b1-1, 0j b2-2操作结果: 创建稀疏矩阵MPrint SMatrix(M);/ 初始化条件: 稀疏矩阵M存在./ 操作结果: 输出稀疏矩阵M.AddSMatrix(M,N,&Q);/ 初始化条件: 稀疏矩阵M与 N的行数和列数对应相等/ 操作结果: 求稀疏矩阵的和Q=M+N.SubSMatrix(M,N,&Q);/ 初始化条件: 稀疏矩阵M与 N的行数和列数对应相等/ 操作结果: 求稀疏矩阵的差Q=M-N.

3、MultSMatrix(M,N,&Q);/ 初始化条件: 稀疏矩阵M的列数等于N的行数 ./ 操作结果: 求稀疏矩阵的乘积Q=M*N. ADT Array调试测试:初始界面矩阵的加法矩阵的减法矩阵的转置矩阵的乘法程序源码:#include#include#include#define MAXSIZE 40 / 假设非零元素个数的最大值为40#define MAXRC 20/ 假设矩阵的最大行数为20typedef int ElemType;typedef structint i,j;/ 非零元的行下标和列下标ElemType e; / 非零元的值Triple;typedef structTri

4、ple dataMAXSIZE+1;int rposMAXRC+1; / 各行第一个非零元在三元组的位置表int hs,ls,fls;TSMatrix,*Matrix;void Creat(TSMatrix &M)int i,k;for(i=1;i=MAXRC+1;i+)M.rposi=0;printf( 请输入矩阵的行数、列数和非零元个数( 以空格隔开):);scanf(%d %d %d,&M.hs,&M.ls,&M.fls);for(i=1;i=M.fls;i+)printf( 请用三元组形式输入矩阵的元素(行 列 非零元素):);scanf(%d %d %d,&M.datai.i,&M.

5、datai.j,&M.datai.e);for(i=1,k=1;i=M.hs;i+)M.rposi=k;while(M.datak.i=i & k=M.fls)k+;void Xiangjia(TSMatrix A,TSMatrix B,TSMatrix &C,int n)int a,b,temp,l;C.hs=A.hs;C.ls=A.ls;a=b=l=1;while(a=A.fls & b=B.fls)if(A.dataa.i=B.datab.i)if(A.dataa.jB.datab.j)C.datal=B.datab; C.datal+.e=n*B.datab+.e;elsetemp=A

6、.dataa.e+n*B.datab.e;if(temp)C.datal=A.dataa;C.datal.e=temp;l+;a+;b+;else if(A.dataa.iB.datab.i)C.datal+=A.dataa+;else C.datal=B.datab; C.datal+.e=n*B.datab+.e;while(a=A.fls)C.datal+=A.dataa+;while(b=B.fls)C.datal=B.datab; C.datal+.e=n*B.datab+.e; C.fls=l-1;int Xiangcheng(TSMatrix A,TSMatrix B,TSMat

7、rix &Q)int arow,brow,ccol,tp,p,q,t;int ctempMAXRC+1;if(A.ls!=B.hs)return 0;Q.hs=A.hs;Q.ls=B.ls;Q.fls=0;if(A.fls*B.fls)for(arow=1;arow=A.hs;arow+)for(ccol=1;ccol=Q.ls;ccol+)ctempccol=0;Q.rposarow=Q.fls+1;if(arowA.hs) tp=A.rposarow+1;else tp=A.fls+1;for(p=A.rposarow;ptp;p+)brow=A.datap.j;if(browB.hs)

8、t=B.rposbrow+1;else t=B.fls+1;for(q=B.rposbrow;qt;q+)ccol=B.dataq.j;ctempccol+=A.datap.e*B.dataq.e;for(ccol=1;ccolMAXSIZE) return 0;Q.dataQ.fls.i=arow;Q.dataQ.fls.j=ccol;Q.dataQ.fls.e=ctempccol;return 1;void Print_SMatrix(TSMatrix M)int k,l,n;Matrix p;p=&M;for(k=1,n=1;khs;k+)for(l=1;lls;l+)if(p-data

9、n.i=k & p-datan.j=l) printf(%5d,p-datan.e);n+;elseprintf(%5d,0);printf(n);printf(n);void Zhuanzhi(TSMatrix *a,TSMatrix *b)int q,col,p;b-hs=a-ls;b-ls=a-hs;b-fls=a-fls;if(b-fls)q=1;for(col=1;colls;col+)for(p=1;pfls;p+) if(a-datap.j=col) b-dataq.i=a-datap.j;b-dataq.j=a-datap.i; b-dataq.e=a-datap.e; +q;

10、void Destory_SMatrix(TSMatrix &M)M.hs=M.ls=M.fls=0; void main() TSMatrix A,B,C;TSMatrix *p=&A,*q=&B; int flag,n;while(1)system(cls);printf(nnn);n);n);n);n);n);n);n);n);printf(tprintf(t*稀疏矩阵的加、减、 转、 乘 *printf(t printf(t 1、稀疏矩阵的加法printf(t 2、稀疏矩阵的减法printf(t 3、稀疏矩阵的转置printf(t 4、稀疏矩阵的乘法printf(t 5、退出该应用程序

11、printf(t n);printf( 输入要进行的项目的编号:);scanf(%d,&flag);if(flag=5) break;Creat(A);printf( 矩阵 A:n); Print_SMatrix(A); switch(flag)case 1: Creat(B);n=1;printf( 矩阵 B:n);Print_SMatrix(B);if(A.hs=B.hs & A.ls=B.ls)printf(A+B:n);Xiangjia(A,B,C,n);Print_SMatrix(C);else printf( 错误 ! 行列不一致n);break;case 2: Creat(B);

12、n=-1;printf( 矩阵 B:n);Print_SMatrix(B);if(A.hs=B.hs & A.ls=B.ls)printf(A-B:n);Xiangjia(A,B,C,n);Print_SMatrix(C);else printf( 错误 ! 行列不一致n);break;case 3: printf(A-B:n);Zhuanzhi(p,q);Print_SMatrix(B);break;case 4: Creat(B);printf( 矩阵 B:n);Print_SMatrix(B);printf(A*B:n);n=Xiangcheng(A,B,C);default:if(!n) else break; printf(printf( 错误 ! 行列不匹配n);输入错误!n);Print_SMatrix(C);Destory_SMatrix(A);Destory_SMatrix(B);Destory_SMatrix(C); getchar();getchar();printf(nttt *程序已经退出*n);getchar(); 小结:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1