稀疏矩阵相乘.doc

稀疏矩阵相乘.doc

ID:61764468

大小:271.50 KB

页数:15页

时间:2021-03-19

稀疏矩阵相乘.doc_第1页
稀疏矩阵相乘.doc_第2页
稀疏矩阵相乘.doc_第3页
稀疏矩阵相乘.doc_第4页
稀疏矩阵相乘.doc_第5页
资源描述:

《稀疏矩阵相乘.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、武汉理工大学《数据结构》课程设计稀疏矩阵相乘1问题描述1.1稀疏矩阵的三元组及十字链表表示(1)稀疏矩阵及其三元组表示行(row)列(col)值(value)[0]0322[1]0615[2]1111[3]1517[4]23-6[5]3539[6]4039[7]5228稀疏矩阵(2)稀疏矩阵的十字链表表示1.2基本要求(1)以“带行逻辑链接信息”的三元组表示稀疏矩阵;(2)输入矩阵用三元组顺序输入;(2)稀疏矩阵采用十字链表表示;(3)实现两个矩阵相乘的运算,而运算结果的矩阵则以通常的阵列形式列出。15武汉理工大学《数据结构》课程设计2设计思路2.1存储结构设计2.1.1三元组表示稀疏矩阵只

2、存储矩阵中极少的非零元素,采用来唯一地确定每一个非零元素,其中row、col、value分别表示非零元素在矩阵中的的行下标、列下表和值。各数组元素的三元组按在原矩阵中的位置以行优先的顺序依次存放。structtriple{//三元组结构定义introw,col;//非零元素行号,列号Floatvalue;//非零元素的值triple&operator=(triple&x){row=x.row;col=x.col;value=x.value;}};2.1.2十字链表表示稀疏矩阵structelement{introw,col;floatvalue;};classM

3、atrix;classnode{//矩阵节点类的定义friendclassMatrix;public:node():head(true){right=down=this;}//建立附加头结点node(element*t)//建立非零元素结点{triple.col=t->col;triple.row=t->row;triple.value=t->value;right=down=this;head=false;15武汉理工大学《数据结构》课程设计}node*down,*right;//行列链表指针boolhead;union{elementtriple;node*next;};//无名联合};

4、classMatrix{//稀疏矩阵的类定义friendistream&operator>>(istream&,Matrix&);friendostream&operator<<(ostream&,Matrix&);private:intRow,Col,Terms,temp;//矩阵的总行数,总列数,和非零元素个数和临时变量;node*headnode;//稀疏矩阵的总表头public:Matrix(intm,intn);//重载构造函数Matrix();//对矩阵进行构造Matrix(Matrix&T);//复制构造函数~Matrix(){makeEmpty();}//析构函数voidIn

5、it(intm,intn);//初始化函数,又来初始化无参构造函数构造的矩阵voidmakeEmpty();//清空矩阵voidInsert(intm,intn,floatp);//插入矩阵元素node*Locate(inti);//定位附加头结点MatrixMul(Matrixb);//两个矩阵相乘Matrix&operator=(Matrix&T);//重载赋值号};在稀疏矩阵的十字链表表示中,矩阵的的每一行设置为一个带附加头结点的循环行链表,每一列也设置为一个带附加头结点的循环列链表。链表中的结点都属于类node的对象,这个类包含一个域head,它用于区分改结点是附加头结点还是链表中的

6、非零元素结点;head=true,表示该结点是附加头结点;head=false,表示该结点是矩阵中的非零元素结点。每一个附加头结点还有三个域:down、right、next。第i个行链表和第i15武汉理工大学《数据结构》课程设计个列链表共用一个附加头结点,在它的right域存放第i行链表最前端的第一个结点的地址,在它的down域存放第i列链表的最前端第一个结点的地址,通过next域链接到第i+1个附加头结点。每一个非零元素结点包含六个域:head,row,col,down,right,value。Down存放列链表指针,right存放行链表指针。整个稀疏矩阵定义为类Matrix的一个对象,*

7、headnode给出整个附加头结点链表的附加头结点的地址。headnextdownrightheadrowcoldownvalueright非零元素结点附加头结点非零元素结点2.2主要算法基于三元组及十字链表的稀疏矩阵乘法MatrixMatrix::Mul(Matrixb)//矩阵乘法的实现{if(this->Col==b.Row){MatrixC(this->Row,b.Col);//以A矩阵的行和b矩阵的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。