首页 数据结构实验报告(实验五_稀疏矩阵运算器)

数据结构实验报告(实验五_稀疏矩阵运算器)

举报
开通vip

数据结构实验报告(实验五_稀疏矩阵运算器)数据结构实验报告(实验五_稀疏矩阵运算器) 实验课程名称:数据结构与算法 实验项目名称:实验五 数组及其应用 稀疏矩阵运算器 实验类型(打? ):(基础 、综合 、设计? ) 实验预习报告内容原则上应包括实验目的、实验所用的主要仪器药品、实验原理与公式、 实验预习疑问等项目。 【实验目的】深入研究数组的存储表示和实现技术,熟悉广义表存储结构的特性。 【需要分析】稀疏矩阵是指那些多数元素为零的矩阵。利用“稀疏”特点进行存储和计算可以 大大节省存储空间,提高计算效率。实现一个能进行稀疏矩阵基本运算的运算...

数据结构实验报告(实验五_稀疏矩阵运算器)
数据结构实验 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 (实验五_稀疏矩阵运算器) 实验课程名称:数据结构与算法 实验项目名称:实验五 数组及其应用 稀疏矩阵运算器 实验类型(打? ):(基础 、综合 、 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 ? ) 实验预习报告内容原则上应包括实验目的、实验所用的主要仪器药品、实验原理与 公式 小学单位换算公式大全免费下载公式下载行测公式大全下载excel公式下载逻辑回归公式下载 、 实验预习疑问等项目。 【实验目的】深入研究数组的存储表示和实现技术,熟悉广义表存储结构的特性。 【需要 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 】稀疏矩阵是指那些多数元素为零的矩阵。利用“稀疏”特点进行存储和计算可以 大大节省存储空间,提高计算效率。实现一个能进行稀疏矩阵基本运算的运算器。要求以带“行 逻辑链接信息”的三元组顺序表存储稀疏矩阵,实现两矩阵的相加、相减、相乘等运算。输入 以三元组表示,输出以通常的阵列形式列出。 【软件平台】 Windows 2000,Visual C,, 6.0或WINTC 【概要设计】 ADT Array { 数据对象: D = {aij | 0?i?b1-1, 0 ?j?b2-1} 数据关系: R = { ROW, COL } ROW = {| 0?i?b1-2, 0?j?b2-1} COL = {| 0?i?b1-1, 0? j?b2-2} 基本操作: CreateSMatrix(&M); //操作结果:创建稀疏矩阵M. Print SMatrix(M); //初始化条件: 稀疏矩阵M存在. //操作结果:输出稀疏矩阵M. AddSMatrix(M,N,&Q); //初始化条件: 稀疏矩阵M与N的行数和列数对应相等. //操作结果:求稀疏矩阵的和Q=M+N. SubSMatrix(M,N,&Q); //初始化条件: 稀疏矩阵M与N的行数和列数对应相等. //操作结果:求稀疏矩阵的差Q=M-N. MultSMatrix(M,N,&Q); //初始化条件: 稀疏矩阵M的列数等于N的行数. //操作结果:求稀疏矩阵的乘积Q=M*N. } ADT Array 【疑问】 (这部分内容因人而异,也可不写) 实验预习评分: 二、实验原始(数据)记录 实验同组人 : nas agulla pinça, 1 i elèctric amb de vora portar liquidació més de 0,2 m/m, dent boca liquidació és superior a 0,4 m/m 2 i altres treballs del despatx vora sobre 0,4 m/m despatx de boca de dent és més gran que la pinça de canonada de 0.5-0.8M/m 20 1 i pinça mare greus desgast 2 i vareta de cargol, i Eix de rosca per lligar la liquidació és superior a 1-1.5M / m 21 Taiwan cargol 1, cargol canya i liquidació de rosca i la liquidació de distribució corredissa és superior a 1,5 a 2 m/m 2 i ontologia ha cruixit 3 i liquidació de la mandíbula és més gran que 0.3M / m 22 en directe els millors 1 i els millors radial batec és més gran que 0,07 m/m 2 i la part superior de la cua con part greu desgast 3 i que s'executen fracàs 23 tornavís 1 i vora duresa prou o alta 2 i nanses Departament esquerdes 24 Serra de metalls Marc 1 i abans i després responsable galeria trenat, és no un avió dins eina elèctrica 25 1, i Part elèctrica fracàs 2 i mecànica part danyat no pot córrer 26 roda 1 i restants diàmetre diàmetre original de gruix 2 i restant cèntim de gruix original de dos terços 3, segons tramitació situació roda consum força complir no processament requisits 27 1 de diamant i per la direcció de diamant acostar implementació 28 diversos mesura 1 i els plans de sector verificació de mesura d'aplicació individual de ferralla 29 altra eina 1 i per la situació específica mitjançant l'ús que va proposar fer supervisor de tecnologia eina validació 18 article màquina i proporciona eina de treball equipades amb: Eines equipades amb fixes es refereix a la màquina, tipus i grup un nombre fix d'eines comuns utilitzats, raonablement equipades i pagat, per tal de 如有实验实验数据表格,学生在实验预习时应画好实验数据表格,供实验填写数据。 请选择所需要的操作功能(A,B,C,D,E,F)A 请输入矩阵的行数和列数: 行数2 列数2 非零元素个数:2 请按行,列和值的形式输入该矩阵的非零元.并以全零为结束标记! 1 2 9 2 1 -1 请选择所需要的操作功能(A,B,C,D,E,F):B 请输入矩阵的行数和列数: 行数2 列数2 非零元素个数:2 请按行,列和值的形式输入该矩阵的非零元.并以全零为结束标记! 1 1 -1 2 1 -3 请选择所需要的操作功能(A,B,C,D,E,F):C 加法结果为: |-1 9| |-4 0| 请选择所需要的操作功能(A,B,C,D,E,F):D 减法结果为: |1 9| |2 0| 请选择所需要的操作功能(A,B,C,D,E,F):E 乘法结果为: |-27 0| |1 0| 指导教师 批阅及签名 实验报告内容原则上应包括主要实验步骤、实验数据计算(实验操作)结果、实验结果 (疑问)分析等项目。 【主程序模块】: void main() { 初始化; do{ 接受命令; 处理命令; }while(命令!=“退出”); } 【功能模块调用关系图】 主程序模块 创建稀疏矩阵模块 运算稀疏矩阵模块 打印稀疏矩阵模块 【详细设计】 稀疏矩阵运算器 矩阵相加 矩阵相减 矩阵相乘 退出本系统 输入矩阵1 输入矩阵1 输入矩阵1 输入矩阵2 输入矩阵2 输入矩阵2 计算结果 计算结果 计算结果 typedef struct{ int row; //行数 int col; //列数 int v; //非零元素值 }triplenode; typedef struct{ triplenode data[maxsize+1]; //非零元三元组 int rowtab[maxrow+1]; //各行第一个非零元的位置表 int mu,nu,tu; //矩阵的行数、列数和非零元个数 nas agulla pinça, 1 i elèctric amb de vora portar liquidació més de 0,2 m/m, dent boca liquidació és superior a 0,4 m/m 2 i altres treballs del despatx vora sobre 0,4 m/m despatx de boca de dent és més gran que la pinça de canonada de 0.5-0.8M/m 20 1 i pinça mare greus desgast 2 i vareta de cargol, i Eix de rosca per lligar la liquidació és superior a 1-1.5M / m 21 Taiwan cargol 1, cargol canya i liquidació de rosca i la liquidació de distribució corredissa és superior a 1,5 a 2 m/m 2 i ontologia ha cruixit 3 i liquidació de la mandíbula és més gran que 0.3M / m 22 en directe els millors 1 i els millors radial batec és més gran que 0,07 m/m 2 i la part superior de la cua con part greu desgast 3 i que s'executen fracàs 23 tornavís 1 i vora duresa prou o alta 2 i nanses Departament esquerdes 24 Serra de metalls Marc 1 i abans i després responsable galeria trenat, és no un avió dins eina elèctrica 25 1, i Part elèctrica fracàs 2 i mecànica part danyat no pot córrer 26 roda 1 i restants diàmetre diàmetre original de gruix 2 i restant cèntim de gruix original de dos terços 3, segons tramitació situació roda consum força complir no processament requisits 27 1 de diamant i per la direcció de diamant acostar implementació 28 diversos mesura 1 i els plans de sector verificació de mesura d'aplicació individual de ferralla 29 altra eina 1 i per la situació específica mitjançant l'ús que va proposar fer supervisor de tecnologia eina validació 18 article màquina i proporciona eina de treball equipades amb: Eines equipades amb fixes es refereix a la màquina, tipus i grup un nombre fix d'eines comuns utilitzats, raonablement equipades i pagat, per tal de }rtripletable; void creat(rtripletable &A) //创建稀疏矩阵 void print(rtripletable A) //输出稀疏矩阵 int addsmatrix(rtripletable M, rtripletable N) //矩阵相加 int subsmatrix(rtripletable M, rtripletable N) //稀疏矩阵相减 void multsmatrix(rtripletable M, rtripletable N, rtripletable &Q) //稀疏矩阵相乘 【调试分析】(这部分内容因人而异) 1、由于开始对顺序存储的知识还不熟识,在三元组的存储和运用会导致算法低效。 2、做到存储的时候,开始时不知道怎样存储三元组,和不知如何去运用它的行数, 列数,非零元素。 3、在使用选择和循环时,有时因为自己的粗心,把循环的条件弄错了。 4、做本程序用到了数组的知识,有时一有不懂的东西又只能打开书来看。 5、开始时没有把矩阵的加法和减法的情况考虑全面,导致输出的时候会出现简单的错 误。 【用户手册】 1、本程序的运行环境为Windows me下的Microsofe VC++ 6.0,执行文件为: xishujuzhen.cpp。 2、进入演示程序后即显示文本方式的用户界面: ------------------------------------------------------------------------------------------------------- |**********稀疏矩阵运算器**********| ============================================================= |============================================================ | | A、输入矩阵1 | | B、输入矩阵2 | | C、矩阵相加 | | D、矩阵相减 | | E、矩阵相乘 | | F、退出本系统 | ------------------------------------------------------------------------------------------------------- 请选择所需要的操作功能(A,B,C,D,E,F) : 3、进入界面后,只要选择数字命令按“回车键”就行。 4、接受其他命令后即执行相应的操作和相应的结果。 实验报告评分: 注:1、如有个别实验的实验报告内容多,实验报告册页面不够写,或有识图,画图要求的,学生应根据实 验指导老师要求另附相同规格的纸张并粘贴在相应的“实验报告册”中。 2、实验报告册属教学运行材料,院系(中心)应按有关 规定 关于下班后关闭电源的规定党章中关于入党时间的规定公务员考核规定下载规定办法文件下载宁波关于闷顶的规定 归档保管。 【源程序】 #include { #include int result[maxrow+1][maxrow+1]; //定义一个二维数组 #include #define maxsize 100 int loop1,loop2; #define maxrow 100 for(loop1=1;loop1<=A.mu;loop1++) #define OK 1 for(loop2=1;loop2<=A.nu;loop2++) result[loop1][loop2]=0; //初始化为0 #define ERROR -1 typedef struct{ for(loop1=1;loop1<=A.tu;loop1++) int row; //行数 result[A.data[loop1].row][A.data[loop1].col]=A.dat int col; //列数 a[loop1].v; int v; //非零元素值 for(loop1=1;loop1<=A.mu;loop1++) }triplenode; { typedef struct{ cout<<"|"; triplenode data[maxsize+1]; //非零元三元组 for(loop2=1;loop2<=A.nu;loop2++) int rowtab[maxrow+1]; cout<>A.mu; cout<<"出错"; cout<<"列数:";cin>>A.nu; rtripletable Q;Q.mu=M.mu;Q.nu=N.nu; cout<<"非零元素个数:";cin>>A.tu; int p,q,k; cout<<"请按行,列和值的形式输入该矩阵的非零p=1;q=1;k=1; 元while(p<=M.tu&&q<=N.tu) //两个稀疏矩阵存在 .并以全零为结束标记!"<>A.data[loop].row>>A.data[loop].col>>A.d ata[loop].v; { //输入三元组的行数,列数和非零元素值 if(M.data[p].col==N.data[q].col) //两个稀疏矩阵的列数相等 } { for(p=1;p<=A.mu;p++) num[p]=0; //A三元组每一列的非零元素个数 if(M.data[p].v+N.data[q].v!=0) //两个稀疏矩阵相加的结果不为0 for(t=1;t<=A.tu;t++) ++num[A.data[t].row]; //求A中每一列含非零元个数 { Q.data[k].row=M.data[p].row; A.rowtab[1]=1; //求第p列中第一个非零元在A.data中的序号 Q.data[k].col=M.data[p].col; Q.data[k].v=M.data[p].v+N.data[q].v;++k; for(t=2;t<=A.mu;t++) } A.rowtab[t]=A.rowtab[t-1]+num[t-1]; return; ++q;++p; } } void print(rtripletable A) //输出稀疏矩阵 else if(M.data[p].colN.data[q].col) //第一个稀疏矩阵列数大于第二个稀疏矩阵的列 Q.data[k]=M.data[p];++p;++k; } { while(q<=N.tu) //只有N并且符合条件 Q.data[k].row=N.data[q].row; { Q.data[k].col=N.data[q].col; Q.data[k]=N.data[q]; Q.data[k].v=-N.data[q].v; ++q;++k; ++q;++k; } } Q.tu=k-1; } cout<<"加法结果为:"<N.data[q].row) //第一个稀疏矩阵行列数大于第二个稀疏矩阵行数 { if(M.mu!=N.mu) //行数相等才能相加 { cout<<"出错"; Q.data[k].row=N.data[q].row; rtripletable Q; Q.data[k].col=N.data[q].col; Q.mu=M.mu; Q.data[k].v=-N.data[q].v;++q;++k; Q.nu=N.nu; } int p,q,k; } while(p<=M.tu) //只有M并且符合条件 for(ccol=1;ccol<=Q.nu;ccol++) //压缩存储该行非零元 { Q.data[k]=M.data[p];++p;++k { if(ctemp[ccol]) } while(q<=N.tu) //只有N并且符合条件 { { if(++Q.tu>maxsize)return ; Q.data[Q.tu].row=arow; //行数 Q.data[k].row=N.data[q].row; Q.data[Q.tu].col=ccol; //列数 Q.data[k].col=N.data[q].col; Q.data[k].v=-N.data[q].v; Q.data[Q.tu].v=ctemp[ccol]; //累加非零元素值 ++q;++k; } } Q.tu=k-1; } cout<<"减法结果为:"<>choice; //对当前行中每一个非零元 switch(choice){ { case'A':creat(A);break; brow=M.data[p].col; //找到对应元N中的行号 case'B':creat(B);break; if(brow
本文档为【数据结构实验报告&#40;实验五_稀疏矩阵运算器&#41;】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_637320
暂无简介~
格式:doc
大小:47KB
软件:Word
页数:17
分类:生活休闲
上传时间:2018-11-20
浏览量:24