数据结构实验报告.doc
上传人:sy****28 上传时间:2024-09-15 格式:DOC 页数:10 大小:211KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

数据结构实验报告.doc

数据结构实验报告.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

数据结构实验报告姓名:学号:专业:信息技术班级:任课老师:辅导教师:试验编号:试验一小组成员:一、实验项目:稀疏矩阵运算器二、实验目的:用链表方法实现相加、相减和相乘运算。三、实验内容:稀疏矩阵是指那些多数元素为零的矩阵。利用“稀疏”特点进行存储和计算可以大大节省存储空间,提高计算效率。实现一个能进行稀疏矩阵基本运算的运算器。四、需求分析1、本程序利用稀疏矩阵便于节省空间;2、以矩阵形式输出;3、利用十字链边表行加减乘除;五、概要设计1、根据要实现的功能,应该以链表来表示集合,所以需要构造的数据类型为链表和集合。2、链表节点的构造:typedefstructnode{innodti,j,e;//该非零元的行列下标和非零元structe*right,*down;//该非零元所在行列表的后续链域}*OLink;3、部分函数功能简介voidputin(list&M,inti,intj,inte)//初始化一个包含三元组信息的结点并链入。intCreateSMAreix(list&M)//创造一个稀疏矩阵并用十字链表储存表示。voidcopy(list&M,list&N)//复制矩阵M,为N;voiddisplay(list&M)//把稀疏矩阵M,转换为通常形式输出。voidadd(list&M,list&N)//实现加法。voidsub(list&M,list&N)//实现减法。voidmul(list&M,list&N,list&X)//实现乘法。六、详细设计#include<iostream>#include<iomanip>usingnamespacestd;typedefstructnode{inti,j,e;//该非零元的行列下标和非零元structnode*right,*down;//该非零元所在行列表的后续链域}*OLink;structlist{OLink*rhead,*chead;//行列链表指针向量基址有CreateSMAreix分配intmu,nu,tu;//稀疏矩阵的行数,列数和非零元个数};voidputin(list&M,inti,intj,inte)//初始化一个包含三元组信息的结点并链入{//十字链表node*p,*q;if(!(p=(node*)malloc(sizeof(node))))exit(-2);//为结点分配空间p->i=i;p->j=j;p->e=e;p->down=NULL;p->right=NULL;//输入行,列和非零元信息if(M.rhead[i]==NULL||M.rhead[i]->j>j)//把结点链入十字链表中{//寻找在行表中出入位置p->right=M.rhead[i];M.rhead[i]=p;}else{for(q=M.rhead[i];(q->right)&&q->right->j<j;q=q->right);p->right=q->right;q->right=p;}//完成插入if(M.chead[j]==NULL||M.chead[j]->i>i){//寻找在列表中出入位置p->down=M.chead[j];M.chead[j]=p;}else{for(q=M.chead[j];(q->down)&&q->down->i<i;q=q->down);p->down=q->down;q->down=p;}//完成插入}intCreateSMAreix(list&M)//创造一个稀疏矩阵并用十字链表储存表示{node*p,*q;inti,m,n,t,j,k,e,x;cout<<"矩阵行数,矩阵列数,矩阵非零元个数:"<<endl;//输入M的行数,列数和非零元个数cin>>m>>n>>t;M.mu=m;M.nu=n;M.tu=t;if(!(M.rhead=(OLink*)malloc((m+1)*sizeof(OLink))))exit(-2);if(!(M.chead=(OLink*)malloc((n+1)*sizeof(OLink))))exit(-2);for(k=0;k<=m;k++)//初始化行列头指针向量;各行列链表为空链表M.rhead[k]=NULL;for(k=0;k<=n;k++)M.chead[k]=NULL;for(k=0;k<M.tu;k++)//输入三元组信息i,j,e{cout<<"输入三元组非零元的行序