稀疏矩阵带行指针数组单链表存储结构及相加算法实现.docVIP

稀疏矩阵带行指针数组单链表存储结构及相加算法实现.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
稀疏矩阵带行指针数组单链表存储结构及相加算法实现

稀疏矩阵带行指针数组单链表存储结构及相加算法实现   摘要:带行指针数组的单链表存储结构是稀疏矩阵压缩存储的一种实用的链式存储结构。文中描述了稀疏矩阵带行指针数组的单链表存储结构及基于此链式存储结构的相加运算算法,并应用C++类模板完成矩阵相加算法的具体实现,对类中参数的抽象化,提高了程序代码的复用性 关键词:稀疏矩阵;行指针数组;链表存储结构;矩阵相加算法 中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)36-0035-03 1稀疏矩阵 矩阵在科学计算中的应用十分广泛,而且随着计算机应用的发展,大量出现处理高阶矩阵问题,有的甚至达到几十万阶、几千亿个元素,这就有点要挑战计算机的内存容量了。然而,在大量的高阶矩阵问题中,绝大部分元素是零值,且非零值的分布没有一定的规律。当非零元素所占比例小于等于25%~30%时,我们称这种含有大量零元素的矩阵为稀疏矩阵。压缩这种零元素占据的空间,节省内存同时能够避免大量零元素进行的无意义运算,大大提高运算效率。[1] 稀疏矩阵压缩存储的顺序方式有三元组表、伪地址表示法等;链式结构有十字链表结构、带行指针数组的链表结构等。本文着重介绍带行指针数组的链表结构及基于此结构的稀疏矩阵类对象构造、输入、输出、相加等基本算法 2稀疏矩阵带行指针数组的单链表存储结构[2] 稀疏矩阵中的每行对应一个单链表,每个单链表都有个表头指针,为了便于访问每一个单链表,需要使用一个行指针数组,该数组中的第i个元素用来存储矩阵中第i行对应的单链表的表头指针,该指针指向第i行第一个非零结点,若该行无非零元,则该指针为空 带行指针数组的单链表存储结构中,把具有相同行号的三元组结点按照列号从小到大的顺序链接成一个单链表,每个结点由3个域组成:非零元所在列的列号(col),非零元的值(value)及指向本行下一个非零元的指针(next)。例如,稀疏矩阵A6×7如图1及其带行指针数组的单链表存储结构如图2所示 3稀疏矩阵带行指针数组的单链表存储结构类型 3.1结点类定义 稀疏矩阵带行指针数组的单链表存储结构中每一个非零元结点的类的C++模板如下:[3] template structTripleNode {int col; T value; TripleNode*next; TripleNode operator=(TripleNodex) {col=x.col;value=x.value;next=NULL;return *this;}} 3.2??行指针数组的单链表存储结构表示的稀疏矩阵类 带行指针的单链表存储结构表示的稀疏矩阵类包含稀疏矩阵行数、列数及非零元个数及动态行指针数组4个私有成员及稀疏矩阵的构造函数、析构函数、输入、输出、转置、相加、相乘等公有成员函数的声明,类的C++模板如下: template classSparseMatrix {private: int Rows,Cols,Terms; TripleNode **PROWS; public: SparseMatrix(int rc,int cc,int tc); ~SparseMatrix(){delete []PROWS;} void Add(SparseMatrixb,SparseMatrixc); void create_SparseMatrix(); void print_SparseMatrix();}; 4基于带行指针数组的单链表存储结构基本运算 4.1构造函数 template SparseMatrix(intrc,intcc,inttc) { Rows=rc; Cols=cc; Terms=tc; PROWS=newTwo_tuple *[Rows]; for (intI=0;I voidcreate_SparseMatrix() { int r,c; T v; Two_tuple *p,*q,*s; for (int i=0;ircv; s=newTwo_tuple; s-col=c;s-value=v;s-next=NULL; p=PROWS[r]; q=p; while(p) { q=p;p=p-next;} if (p==q){ PROWS[r]=s;} else { q-next=s;}}} 4.3 基于带行指针数组的单链表存储结构稀疏矩阵相加算法   两个矩阵相加前提条件是两个矩阵行数和列数分别对应相等。

文档评论(0)

docman126 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:7042123103000003

1亿VIP精品文档

相关文档