稀疏矩阵的建立与转置.doc_第1页
稀疏矩阵的建立与转置.doc_第2页
稀疏矩阵的建立与转置.doc_第3页
稀疏矩阵的建立与转置.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验2 稀疏矩阵的建立与转置一、实验目的掌握特殊矩阵的存储和操作算法。二、实验内容及问题描述实现用三元组保存稀疏矩阵并实现矩阵转置的算法。三、实验步骤1. 定义稀疏矩阵的三元组形式的存储结构。2. 实现三元组矩阵的传统转置算法。3. 实现三元组矩阵的快速转置算法。4. 输入矩阵非零元素,测试自己完成的算法。四、程序流程图五、概要设计矩阵是很多的科学与工程计算中研究的数学对象。在此,我们感兴趣的是,从数学结构这门学科着眼,如何存储矩阵的元从而使矩阵的各种运算有效的进行。 本来,用二维数组存储矩阵,在逻辑上意义是很明确的,也很容易理解,操作也很容易和方便。但是在数值分析中经常出现一些阶数很高的矩阵,同时,在矩阵中又有很多值相同或者都为零的元素,可以对这种矩阵进行压缩存储:对多个值相同的元素只分配一个存储空间;对零元素不分配空间。稀疏矩阵的定义是一个模糊的定义:即非零元个数较零元个数较少的矩阵。例如下图所示的矩阵为一个稀疏矩阵。 为了实现稀疏矩阵的这种存储结构,引入三元组这种数据结构。三元组的线性表顺存储形式如下图:六、详细设计sanyuanzu.h 头文件#define max 100typedef struct int row,col; int e;Triple;/定义三元组typedef struct Triple datamax; int mu,nu,tu;TSMatrix;/*定义三元组的稀疏矩阵*/ void creat( TSMatrix &M) ; void fasttrans(TSMatrix A,TSMatrix &B); void printfx(TSMatrix x);sanyuanzu.cpp 文件#include#includesanyuanzu.h/*建立三元组的稀疏矩阵*/ void creat( TSMatrix &M) printf(请输入稀疏矩阵的行数:); scanf(%d,&M.mu); printf(请输入稀疏矩阵的列数:); scanf(%d,&M.nu); printf(请输入矩阵中非零元素的个数:); scanf(%d,&M.tu); int i; printf(请输入这%d 个元素的行号和列号及其元素的值:/n,M.tu); for(i = 1; i = M.tu; i+)scanf(%d %d %d,&M.datai.row,&M.datai.col,&M.datai.e);/*实现三元组的矩阵转置的函数*/ void fasttrans(TSMatrix A,TSMatrix &B) int col,cpotmax,nummax,t,p,q;/*初始化矩阵B*/ B.mu=A.nu; B.nu=A.mu; B.tu=A.tu; if(B.tu) for(col=1;col=A.nu;+col) numcol=0;/*初始化每一列非零元的个数*/ for(t=1;t=A.tu;+t) +numA.datat.col;/*计算每一列非零元的个数*/ cpot1=1; for(col=2;col=A.nu;+col) cpotcol=cpotcol-1+numcol-1;/计算矩阵A 每一列第一个非零元在B.data 中的位置/*实现对A 中的每一个非零元进行转置*/ for(p=1;p=A.tu;+p) col=A.datap.col; q=cpotcol; B.dataq.row=A.datap.col; B.dataq.col=A.datap.row; B.dataq.e=A.datap.e; +cpotcol; /*稀疏矩阵的输出*/ void printfx(TSMatrix x) int i,j; for(j=1;j=x.tu;j+) for(i=1;i=x.mu;i+) if(x.dataj.row=i)printf(%d %d %d/n,x.dataj.row,x.dataj.col,x.dataj.e); main.cpp 文件#include#includesanyuanzu.cpp/主函数 int main(void) TSMatrix t,s; creat(t); printf(你所输入的稀疏矩阵为:/n); printfx(t); fasttrans(t,s); printf(转置后的稀疏矩阵为:/n); printfx(s); return 0; 七、调试报告八、分析与遇到的问题(1) 创建稀疏矩阵时,不懂如何用三元组表示元素的输出; (2)需要注意矩阵运算中的特殊状况, 稀疏矩阵相加时,忘记对应元素相加为0时,在稀疏矩阵中不表示; (3) 矩阵相加时,第一个矩阵的行列数要和第二个矩阵的行列数相等;(4)输出矩阵时,输出界面不整齐。9、 用户使用说明(1) 运行程序,首先会看到一个提供选择的界面,输入相应的序号实现相应的功能;(2) 在进行相应的功能之后按提示要求一三元组形式输入相应矩阵。(注意:每个数据之间用空格隔开);(3) 输入相应矩阵之后会输出最后的运算结果;(4) 输出结果运算之后会可按任意键返回。10、 心得体会 这次数据结构课程设计的制作使我对数据结构和C语言的理解加深,也使我自己认识到自己很多不足之处。我发现自己再处理稍微具体的程序时显得无从下手以前学习的知识只是理论性的知识,并没有真正实践过,当我通过网上查询、复习知识后才对编程程序有了初步思路。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论