- 1、本文档共61页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* (1,3,3) (1,8,1) (3,1,9) (4,5,7) (5,7,6) (6,4,2) (6,6,3) (7,3,5) // 三元组类 templateclass ElemType struct Triple { // 数据成员: int row, col; // 非零元素的行下标与列下标 ElemType value; // 非零元素的值 // 构造函数: Triple(); // 无参数的构造函数 Triple(int r, int c, ElemType v); // 已知数数据域建立三元组 }; 以顺序表存储三元组表,可得到稀疏矩阵的顺序存储结构——三元组顺序表 在三元组顺序表中,用三元组表表示稀疏矩阵时,为避免丢失信息,增设了一个信息元组,形式为: (行数,列数,非零元素个数) (7,8,8) (1,3,3) (1,8,1) (3,1,9) (4,5,7) (5,7,6) (6,4,2) (6,6,3) (7,3,5) // 稀疏矩阵三元组顺序表类 templateclass ElemType class TriSparseMatrix { protected: // 稀疏矩阵三元组顺序表的数据成员: TripleElemType *triElems; // 存储稀疏矩阵的三元组表 int maxSize; // 非零元素最大个数 int rows, cols, num; // 稀疏矩阵的行数,列数及非零元个数 public: // 抽象数据类型方法声明及重载编译系统默认方法声明: TriSparseMatrix(int rs = DEFAULT_SIZE, int cs = DEFAULT_SIZE, int size = DEFAULT_SIZE); // 构造一个rs行cs列非零元素最大个数为size // 的空稀疏矩阵 ~TriSparseMatrix(); // 析构函数 int GetRows() const; // 返回稀疏矩阵行数 int GetCols() const; // 返回稀疏矩阵列数 int GetNum() const; // 返回稀疏矩阵非零元个数 StatusCode SetElem(int r, int c, const ElemType v); // 设置指定位置的元素值 StatusCode GetElem(int r, int c, ElemType v); // 求指定位置的元素值 TriSparseMatrixElemType operator =(const TriSparseMatrixElemType copy);// 赋值 …… }; 稀疏矩阵的转置 算法的基本思想:第一次从source中取出应该放置到dest中第一个位置的元素,行列号互换后,放于dest中第一个位置;第二次从source中选取应该放到dest中的第二个位置的元素,……,如此进行,依次生成dest中的各元素。 由于转置后列号变行号,所以转置后元素的行序排列实质上是原矩阵元素的列序排列。实现算法可形式化描述为: destPos = 0; // 稀疏矩阵dest的下一个三元组的存放位置 for(col = 最小列号; col =最大列号; col++) { 在source中从头查找有无列号为col的三元组; 若有,则将其行、列号交换后,依次存入dest 中destPos所指位置,同时destPos加1; } templateclass ElemType void TriSparseMatrixElemType::SimpleTranspose( const TriSparseMatrixElemType source, TriSparseMatrixElemType dest) // 操作结果:将稀疏矩阵source转置成稀疏矩阵dest的简 // 单算法 { dest.rows = source.cols; // 行数 dest.cols = source.rows; // 列数 dest.num = source.num; // 非零元素个数 dest.maxSize = source.maxSize; // 最大非零元素个数 delete []dest.triElems; // 释放存储空间 dest.triElems = new TripleElemType [dest.maxSize]; // 分配存储空间 if (dest.
文档评论(0)