稀疏矩阵 c++编程.docVIP

  • 25
  • 0
  • 约5.04千字
  • 约 6页
  • 2017-06-02 发布于河南
  • 举报
稀疏矩阵c编程

#includeiostream using namespace std; const int DafaultSize=100; struct Trituple { int row,col; double value; Trituple operator = (Trituple x) {row=x.row;col=x.col;value=x.value;return *this;} }; class SparseMatrix { friend ostream operator(ostream out,SparseMatrix M); friend istream operator(istream in,SparseMatrix M); private: int Rows,Cols,Terms; Trituple *smArray; int maxTerms; public: SparseMatrix(int maxSz=DafaultSize); SparseMatrix(SparseMatrix x); ~SparseMatrix(){delete[]smArray;} 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 Trituple[maxSz]; 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 Trituple[maxTerms]; if(smArray==NULL) { cerr存储分配错误!endl; exit(1); } for(int i=0;iTerms;i++) smArray[i] = x.smArray[i]; }; ostream operator(ostream out,SparseMatrix M) { outrows = M.Rowsendl; outcols = M.Colsendl; outNonzero terms = M.Termsendl; for(int i=0;iM.Terms;i++) outM[M.smArray[i].row][M.smArray[i].col]=M.smArray[i].valueendl; return out; }; istream operator(istream in,SparseMatrix M) { cout请输入稀疏矩阵的行数,列数及项数!endl; inM.RowsM.ColsM.Terms; if(M.TermsM.maxTerms) { cerr项数太多!endl; exit(1); } for(int i=0;iM.Terms;i++) { cout请输入项的行数,列数及其值:i+1endl; inM.smArray[i].rowM.smArray[i].colM.smArray[i].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;iTerms;i++) { if(smArray[i].col==k) { b.smArray[CurrentB].row=k; b.smArray[CurrentB].col=smArray[i].row; b.smArray[Cu

文档评论(0)

1亿VIP精品文档

相关文档