稀疏矩阵 c++编程.doc_第1页
稀疏矩阵 c++编程.doc_第2页
稀疏矩阵 c++编程.doc_第3页
稀疏矩阵 c++编程.doc_第4页
稀疏矩阵 c++编程.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

#includeusing namespace std;const int DafaultSize=100;struct Tritupleint row,col;double value;Trituple& operator = (Trituple& x)row=x.row;col=x.col;value=x.value;return *this;class SparseMatrixfriend ostream& operator(istream& in,SparseMatrix& M);private:int Rows,Cols,Terms;Trituple *smArray;int maxTerms;public:SparseMatrix(int maxSz=DafaultSize);SparseMatrix(SparseMatrix& x);SparseMatrix()deletesmArray;SparseMatrix& operator = (SparseMatrix& x);SparseMatrix Transpose();SparseMatrix FastTranspose();SparseMatrix Add(SparseMatrix& b);SparseMatrix Multiply(SparseMatrix& b);SparseMatrix:SparseMatrix(int maxSz):maxTerms(maxSz)if(maxSz1)cerr矩阵初始化错误!endl;exit(1);smArray=new TrituplemaxSz;if(smArray=NULL)cerr储存分配错误!endl;exit(1);Rows=Cols=Terms=0;SparseMatrix:SparseMatrix(SparseMatrix& x)Rows=x.Rows;Cols=x.Cols;Terms=x.Terms;maxTerms=x.maxTerms;smArray=new TrituplemaxTerms;if(smArray=NULL)cerr存储分配错误!endl;exit(1);for(int i=0;iTerms;i+)smArrayi = x.smArrayi;ostream& operator(ostream& out,SparseMatrix& M)outrows = M.Rowsendl;outcols = M.Colsendl;outNonzero terms = M.Termsendl;for(int i=0;iM.Terms;i+)outMM.smArrayi.rowM.smArrayi.col=M.smArrayi.value(istream& in,SparseMatrix& M)cout请输入稀疏矩阵的行数,列数及项数!M.RowsM.ColsM.Terms;if(M.TermsM.maxTerms)cerr项数太多!endl;exit(1);for(int i=0;iM.Terms;i+)cout请输入项的行数,列数及其值:i+1M.smArrayi.rowM.smArrayi.colM.smArrayi.value;return in;SparseMatrix SparseMatrix:Transpose()SparseMatrix b(maxTerms);b.Cols=Rows;b.Rows=Cols;b.Terms=Terms;if(Terms0)int k,i,CurrentB=0;for(k=0;kCols;k+)for(i=0;i0)int i,j;for(i=0;iCols;i+) rowSizei=0;for(i=0;iTerms;i+) rowSizesmArrayi.col+;rowStart0=0;for(i=1;iCols;i+)rowStarti=rowStarti-1+rowStarti-1;for(i=0;iTerms;i+)j=rowStartsmArrayi.col;b.smArrayj.row=smArrayi.col;b.smArrayj.col=smArrayi.row;b.smArrayj.value=smArrayi.value;rowStartsmArrayi.col+;delete rowSize;delete rowStart;return b;SparseMatrix SparseMatrix:Add(SparseMatrix& b)SparseMatrix result(b);if(Rows!=b.Rows|Cols!=b.Cols)cerr两?矩?阵规?格?不?同?!?endl;return result;int i=0,j=0,index_a,index_b;result.Terms=0;while(iTerms&jindex_b)result.smArrayresult.Terms=b.smArrayj;j+;else if(index_aindex_b)result.smArrayresult.Terms=smArrayi;i+;elseresult.smArrayresult.Terms=smArrayi;result.smArrayresult.Terms.value=smArrayi.value+b.smArrayj.value;if(result.smArrayresult.Terms.value=0)result.Terms-;i+,j+;result.Terms+;SparseMatrix SparseMatrix:Multiply(SparseMatrix& b)SparseMatrix result(*this);if(Rows!=b.Cols)cerrA的列数不等于的行数,不可相乘!endl;return result;if(Terms=maxTerms|b.Terms=maxTerms)cerr空间不足!endl;return result;int *rowSize=new intb.Rows;int *rowStart=new intb.Rows+1;double *temp=new doubleb.Cols;int i,Current,lastInResult,RowA,ColA,ColB;for(i=0;ib.Rows;i+)rowSizei=0;for(i=0;ib.Terms;i+)rowSizeb.smArrayi.row+;rowStart0=0;for(i=1;i=b.Rows;i+)rowStarti=rowStarti-1+rowSizei-1;Current=0;lastInResult=-1;while(CurrentTerms)RowA=smArrayCurrent.row; /当前行的行号?for(i=0;ib.Cols;i+)tempi=0;while(CurrentTerms&smArrayCurrent.row=RowA)ColA=smArrayCurrent.col; /矩阵当前扫描到元素的列号for(i=rowStartColA;irowStartColA+1;i+)ColB=b.smAr

温馨提示

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

评论

0/150

提交评论