- 1、本文档共19页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
稀疏矩阵数据结构实验报告
目 录
1.需求分析 1
2.概要设计 2
2.1链表对稀疏矩阵进行定义 2
2.3程序一共有五个功能 2
3.详细设计 3
3.1稀疏矩阵存储算法分析 3
3.2稀疏矩阵各运算算法分析 3
4.调试分析 8
4.1调试过程中的问题及解决方法 8
4.2算法的时间复杂度和空间复杂 8
4.3经验和体会 8
5.用户使用说明 9
6.测试结果 10
6.1程序主界面 10
6.2其他函数操作界面显示 10
参考文献 15
致谢 16
1.需求分析
矩阵在日常生活中应用广泛,尤其是有些特殊矩阵的运算。但是在实际应用中有一种矩阵,在m×n的矩阵中有t个非零元素,且t远小于m×n,我们这样的矩阵被称为稀疏矩阵。由于这类矩阵中通常零元素是没有规律的,为了能够找到相应的元素,仅存储非零元素的值是不行的,还要存储其所在的行和列等信息。
本程序主要的任务是创建稀疏矩阵,并且利用C++算法程序实现相应的运算(转置,加法,减法,乘法)
(1)输入的形式以及范围:键盘输入符合要求的稀疏矩阵。
(2)输出形式:最终运算结果以矩阵的形式输出。
(3)程序功能实现:输入矩阵通过程序运算出相应的转置矩阵以及两个符合要求的矩阵的加减乘除法的运算。
(4)测试数据:如果输入正确,程序会显示最后的运算结果;否则错误时则会返回上层。
2.概要设计
要存储稀疏矩阵并且进行运算,那么就要了解稀疏矩阵的存储结构,这里采用链表的形式存储稀疏矩阵并进行运算。
2.1链表对稀疏矩阵进行定义
typedef struct OLNode
{ // 定义链表元素
int i,j;
int e;
struct OLNode *next; // 该非零元所在行表和列表的后继元素
}OLNode,*OLink;
typedef struct
{ // 定义链表对象结构体
OLink *head; //头指针
int mu,nu,tu; // 行数,列数,和非零元素个数
}CrossList;
2.3程序一共有五个功能
用CreateSMatrix_OL(M)函数来实现稀疏矩阵的存储,用OutPutSMatrix_OL(M)函数实现稀疏矩阵的输出。
使用TransposeSMatrix( )函数实现稀疏矩阵的转置操作。
使用AddSMatrix( )函数实现稀疏矩阵的加法运算。
使用SubSMatrix( )函数实现稀疏矩阵的减法运算。
使用MultSMatrix ( )函数实现稀疏矩阵的乘法运算。
在TransposeSMatrix( ),AddSMatrix( ),SubSMatrix( ),MultSMatrix ( )各函数中又调用到矩阵的存入和输出函数。
图2-1 程序主要函数关系
3.详细设计
3.1稀疏矩阵存储算法分析
链表存储稀疏矩阵的基本思想是:创建一个数据域还有一个指针域,数据域用来存储该非零元素的行、列、数值;指针域next指向下一结点。如图3-1 所示
图3-1 链表的结点结构
把稀疏矩阵的三元素(行数、列数、非零元素个数)放在头结点中,头结点的next指向第一个结点。数据结点中数据域存储行值、列值、数值,指针指向下一个结点,这样把一个个的结点连接起来。
在此以稀疏矩阵 为例,画出十字链表存储的结构图
如图3-2 :
图3-2 十字链表
3.2稀疏矩阵各运算算法分析
根据整个程序的功能分析,该稀疏矩阵程序需要实现以下运算功能:
(1)稀疏矩阵的转置
(2)稀疏矩阵的乘法
(3)稀疏矩阵的加法
(4)稀疏矩阵的减法
根据整个函数的具体分析,从中可以剖析出程序具有以下函数
表3-1 程序中的函数列表
相应函数 相应功能 CreateSMatrix_OL(CrossList M) 用链表的方式存储稀疏矩阵 OutPutSMatrix_OL(CrossList T) 读取用链表存储的稀疏矩阵 TransposeSMatrix( ) 转置矩阵 MultSMatrix ( ) 稀疏矩阵的乘法 AddSMatrix() 稀疏矩阵的加法 SubSMatrix() 稀疏矩阵的减法 3.2.1 TransposeSMatrix( )函数
该函数是对输入的稀疏矩阵进行转置,设原矩阵为M是一个m×n稀疏矩阵,那么其转置矩阵N就是一个n×m的稀疏矩阵。只要把稀疏矩阵M的行、列转化为T的列、行。
调用CreateSMatrix_OL(CrossList M)函数读取要转置的矩阵M,定义转置后的矩阵N。复制矩阵M的头结点,设当前指针为
文档评论(0)