- 1、本文档共32页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构第五章课件
第五章 数组和特殊矩阵 数组及其存储结构 特殊矩阵的压缩存储 对称矩阵的压缩存储 三角矩阵的压缩存储 对角矩阵的压缩存储 稀疏矩阵的压缩存储 对数组的操作主要是存取数组元素,即向某个数组元素存入数据和获取某个数组元素中的数据。 数组的存储结构 数组是一种随机存储结构(顺序存储) 行向量 下标 i 页向量 下标 i 列向量 下标 j 行向量 下标 j 列向量 下标 k 二维数组 通常有两种顺序存储方式: (1)行优先顺序: 将数组元素按行排列 (2)列优先顺序: 将数组元素按列排列 对角矩阵的压缩存储方法 将位于以主对角线为中心的带状区域中的非零元素按某种顺序(如按行优先顺序、按列优先顺序或按对角线的顺序)压缩存储到一个一维数组中。 找每个非0元素和向量下标的对应关系 举例: 将三对角矩阵A中的非零元素按“行优先顺序”存放到数组sa[3n?2]中。三对角矩阵A中,除第一行和最后一行只有两个非零元素外,其他每行中均有三个非零元素,可知矩阵中位于aij之前的非零元素共有i行,共包含3i?1个非零元素,且aij所在的第i行前面还有j?(i?1)个非零元素。因此可推出,sa[k]与三对角矩阵中的元素aij存在的对应关系为 k = 3i?1+j?(i?1) = 2i+j 一般来说,稀疏矩阵非0元素的分布是无规律的。因此,在存储非0元素的同时,还要存储适当的辅助信息,才能迅速确定某一指定非0元素的位置。 稀疏矩阵常用的压缩存储方式: 三元组表 十字链表 templateclass T class SparseMatrix { vectorTripleT triList; //三元组表 int rows, cols, num; //行数、列数和非零元素个数 public: SparseMatrix( ); //无参构造函数 SparseMatrix(TripleT *tlist, int rs, int cs, int n); //构造函数 void trans(SparseMatrix B); //矩阵转置运算 SparseMatrix plus(SparseMatrix B); SparseMatrix mult(SparseMatrix B); void print(); //打印矩阵信息 }; 朴素转置算法 templateclass T void SparseMatrixT::trans(SparseMatrixT B) { B.rows=cols; B.cols=rows; B.num=num; if (num==0) return; q = 0; for (col=0; colcols; ++col) //按矩阵A的列序进行转置 for (p=0; pnum; ++p) if ( triList[p].c == col ){ B.triList[q].r=triList[p].c; B.triList[q].c=triList[p].r; B.triList[q].elem=triList[p].elem; ++q; } } 举例 templateclass T struct CrossNode { int r, c; //非零元素所在的行号和列号 T elem; CrossNode *right, *down; }; templateclass T class CrossMatrix { vectorCrossNodeT rheads, cheads; int rows, cols, num; 行数、列数和元素个数 public: CrossMatrix(); //无参构造函数 CrossMatrix(int r, int c, int n); //构造函数 void trans(CrossMatrix B); //矩阵转置 CrossMatrix plus(CrossMatrix B); //加法 CrossMatrix mult(CrossMatrix B); //乘法 void print(); //打印矩阵信息 }; 本 章 小 结 (1)掌握多维数组的概念与顺序存储方法。 (2)掌握对称矩阵、三角矩阵、对角矩阵这三种特殊矩阵的压缩存储方法,并掌握矩阵元素和压缩为一维数组元素之间的对应关系。 (3)掌握稀疏矩阵的概念与
文档评论(0)