




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、稀疏矩阵的压缩存储及运算1、 实验内容实现稀疏矩阵的压缩存储方法以及在特定存储方法下的基本运算2、 实验母的掌握数组的应用,包括稀疏矩阵、特殊矩阵的压缩存储方法。矩阵的基本运算的实现,包括矩阵相加、转置、乘法等。3、 问题描述1)用行逻辑链接顺序表和十字链表分别实现稀疏矩阵的压缩存储2)编程实现矩阵的转置运算和乘法运算(运用行逻辑链接顺序表或十字链表作为存储结构)四、问题的实现稀疏矩阵的抽象数据类型定义:ADT SpareseMatrix数据对象: 数据关系: :基本操作:CreateSMatrix(&M);操作结果:创建稀疏矩阵M。PrintSMatrix(M);初始条件:稀疏矩阵M
2、存在。操作结果:输出稀疏矩阵M。AddSMatrix(M,N,&Q);初始条件:稀疏矩阵M和N的行数和列数对应相等。操作结果:求稀疏矩阵的和Q=M+N。MultSMatrix(M,N,&Q);初始条件:稀疏矩阵M的列数等于N的行数。操作结果:求稀疏矩阵乘积Q=M*N。TransposeSMatrix(M,&T);初始条件:稀疏矩阵M存在。操作结果:求稀疏矩阵M的转置矩阵T。ADT SpareseMatrix5、 主要源程序代码#include<iostream>using namespace std;#define MAXSIZE 100;int num10
3、0;typedef struct OLNodeint i,j;int e;struct OLNode *right,*down;OLNode,*OLink;typedef structOLink *rhead,*chead;int mu,nu,tu;CrossList; /十字链表结构体定义int CreatSMatrix_OL(CrossList &M)int i,j,e;OLink q;OLink p;cout<<"请输入稀疏矩阵的行数,列数,非零元素的个数:"cin>>M.mu;cin>>M.nu;cin>>M.
4、tu;M.rhead=(OLink *)malloc(M.mu+1)*sizeof(OLNode);M.chead=(OLink *)malloc(M.nu+1)*sizeof(OLNode);for(i=1;i<=M.mu;i+) M.rheadi=NULL;for(i=1;i<=M.nu;i+) M.cheadi=NULL;cout<<"请输入稀疏矩阵,若为空,则退出"<<endl;cin>>i;cin>>j;cin>>e;while (i!=0)p=(OLink)malloc(sizeof(OLN
5、ode);p->i=i;p->j=j;p->e=e;if (M.rheadi=NULL | M.rheadi->j>j) p->right=M.rheadi;M.rheadi=p;elseq=M.rheadi;while (q->right && q->right->j<j) q=q->right;p->right=q->right;q->right=p;if (M.cheadj=NULL | M.cheadj->i>i) p->down=M.cheadj;M.cheadj=p
6、;elseq=M.cheadj;while (q->down && q->down->i<i)q=q->down;p->down=q->down;q->down=p;cin>>i;cin>>j;cin>>e;return 1; /创建十字链表void TurnSMatrix_OL(CrossList &M)int a,b;OLink p,q;for(a<1;a<=M.mu;a+)q=p=M.rheada;while(q)b=p->i;p->i=p->j;p-
7、>j=b;q=p->right;p->right=p->down;p->down=q; /十字链表实现稀疏矩阵转置int AddSMatrix_OL(CrossList *A,CrossList *B)OLNode *pa,*pb,*p,*pre,*cp100;int i,j,t;t=A->tu+B->tu;for(j=1;j<=A->nu;j+) cpj=A->cheadj;for(i=1;i<=A->mu;i+)pa=A->rheadi;pb=B->rheadi;pre=NULL;while(pb)if(p
8、a=NULL | pa->j>pb->j)p=(OLink)malloc(sizeof(OLNode);if(!pre)A->rheadi=p;else pre->right=p;p->right=pa;pre=p;p->i=i;p->j=pb->j;p->e=pb->e;if(!A->cheadp->j)A->cheadp->j=cpp->j=p;p->down=NULL;elsecpp->j->down=p;cpp->j=p;pb=pb->right;else if
9、(pa->j<pb->j) pre=pa;pa=pa->right;else if(pa->e+pb->e)t-;pa->e+=pb->e;pre=pa;pa=pa->right;pb=pb->right;elset=t-2;if(!pre)A->rheadi=pa->right;else pre->right=pa->right;p=pa;pa=pa->right;if(A->cheadp->j=p) A->cheadp->j=cpp->j=p->down;else
10、cpp->j->down=p->down;free(p);pb=pb->right;A->mu=A->mu>B->mu? A->mu:B->mu;A->nu=A->nu>B->nu? A->nu:B->nu;return 1; /十字链表实现两稀疏矩阵相加int MultSMatrix_OL(CrossList M,CrossList N,CrossList &Q)int i,j,e;OLink p0,q0,p,p1,p1a;if(M.nu!=N.mu)cout<<"稀
11、疏矩阵A的列数和B的行数不相等,不能相乘"return 0;Q.mu=M.mu;Q.nu=N.nu;Q.tu=0;if(!(Q.rhead=(OLink *)malloc(Q.mu+1)*sizeof(OLink)exit(-2);if(!(Q.chead=(OLink *)malloc(Q.nu+1)*sizeof(OLink)exit(-2);for(i=1;i<=Q.mu;i+) Q.rheadi=NULL;for(i=1;i<=Q.nu;i+) Q.cheadi=NULL;for(i=1;i<=Q.mu;i+)for(j=1;j<=Q.nu;j+)p0
12、=M.rheadi;q0=N.cheadj;e=0;while(p0 && q0)if(p0->j>q0->i) q0=q0->down;else if(p0->j<q0->i) p0=p0->right;elsee+=p0->e*q0->e;q0=q0->down;p0=p0->right;if(e)if(!(p=(OLink)malloc(sizeof(OLNode)exit(-2);Q.tu+;p->i=i;p->j=j;p->e=e;p->right=NULL;p->d
13、own=NULL;if(Q.rheadi=NULL)Q.rheadi=p1=p;else p1->right=p;p1=p;if(Q.cheadj=NULL)Q.cheadj=p;elsep1a=Q.cheadj;while(p1a->down)p1a=p1a->down;p1a->down=p;return 1; /十字链表实现两稀疏矩阵相乘int ShowSMatrix(CrossList *A)int a;OLink p;for(a=1;a<=A->mu;a+)if(A->rheada) p=A->rheada;while(p)printf
14、("%3d%3d%3dn",p->i,p->j,p->e);p=p->right;return 1; /十字链表显示void main() int n;char c;CrossList MM,TT,SS;CreatSMatrix_OL(MM);cout<<"您输入的稀疏矩阵(只列出非零元素):"<<endl;cout<<"行列大小"<<endl;ShowSMatrix(&MM);cout<<"请选择操作:"<<e
15、ndl;cout<<"1:实现稀疏矩阵的转置"<<endl;cout<<"2:实现两稀疏矩阵的相加"<<endl;cout<<"3:实现两稀疏矩阵的相乘"<<endl;cout<<"4:退出程序"<<endl;cin>>n;switch(n)case 1:TurnSMatrix_OL(MM);cout<<"转置后的稀疏矩阵:行列大小"<<endl;ShowSMatrix(&MM);break;case 2:cout<<"请输入另一个稀疏矩阵:"<<endl;CreatSMatrix_OL(TT);AddSMatrix_OL(&MM,&TT);cout<<"相加后的矩阵为:"<<endl;ShowSMatrix(&MM);break;case 3:cout<<"请输入另一个稀疏矩阵:"<<endl;CreatSMatr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 我国审计制度与初级考试关联解析题及答案
- 无人机驾驶员执照考试的作业规则试题及答案
- 2024年民用航空器维修人员执照考试常见问题及试题及答案
- 提高解题能力2025年一级建造师考试试题及答案
- 2024年中级审计师考试复习计划与试题及答案
- 护理风险管理试题及答案总结
- 无人机驾驶员的职业素养与责任试题及答案
- 2024年财务咨询高级会计试题及答案
- 2025年建造师复习中的便利工具试题及答案
- 2024年高级会计考试热议试题及答案揭秘
- 军事博物馆调研报告
- 山东省济南市槐荫区2023-2024学年小学六年级语文毕业检测指导卷含答案
- 昆虫脉动智慧树知到期末考试答案2024年
- 农产品加工工艺培训PPT创新农产品加工工艺与技术
- 精神病患者藏药的护理措施
- 提高中医技术使用率品管圈课件
- 敬老院食品安全培训
- 大数据背景下企业财务风险分析与防范-以比亚迪公司为例
- 译林版英语一年级下教学计划各单元都有
- 湿疹病人的护理查房
- 海上油气田前期研究
评论
0/150
提交评论