第五章 数组(Array的).pptVIP

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第五章 数组(Array的)

第五章 数组 (Array);定义及其操作;数组具有以下性质: (1)数组中的数据元素数目固定。 (2)数组中的数据元素具有相同的数据类型。 (3)数组中的每个数据元素都和一组唯一的下标值对应。 (4)数组是一种随机存储结构。;存储结构;例,二维数组Am×n按“行优先顺序”存储在内存中,假设每个元素占用d个存储单元。则元素aij的存储地址为:;矩阵的压缩存储;1、对称矩阵 在一个n阶方阵A中,若元素满足下述性质: aij=aji 0≦i,j≦n-1 则称A为对称矩阵。;5.3 矩阵的压缩存储;1、当 i≧j,则aij在下三角形中,其在顺序存储表中元素sak的关系按下式计算:;2、对角矩阵 对角矩阵中,所有的非零元素集中在以主对角线为中心的带状区域中,即除了主对角线和主对角线相邻两侧的若干条对角线上的元素之外,其余元素皆为零。;压缩方法;稀疏矩阵; 0 12 9 0 0 0 0 0 0 -3 0 0 15 0 0 0 0 0 0 0 12 0 0 0 18 0 -3 0 0 0 0 14 0 9 0 0 24 0 0 0 0 24 0 0 0 0 0 0 0 0 0 –7 0 18 0 0 0 0 0 0 0 14 0 0 0 15 0 0 –7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 稀疏矩阵M和T;一、三元组顺序表 假设以顺序存储结构来表示三元组表,则可得到稀疏矩阵的一种压缩存储方法——三元顺序表。 #define NUM 〈矩阵中非零元素最大个数〉 typedef struct{ int i; // 非零元素的行下标 int j; // 非零元素的列下标 elemtype d; }tupletype; // 三元组的定义 typedef struct{ int md; // 稀疏矩阵的行数 int nd; // 稀疏矩阵的列数 int td; // 稀疏矩阵中非零元素的个数 tupletype data[NUM]; }tabletype; // 三元组顺序表的定义 ; 设A为tabletype型的结构变量,则上图中所示的稀疏矩阵的三元组的表示如下: ; 下面以矩阵的转置为例,说明在这种压缩存储结构上如何实现矩阵的运算。 一个m×n的矩阵A,它的转置B是一个n×m的矩阵,且a[i][j]=b[j][i],0≦i≦m,0≦j≦n,即A的行是B的列,A的列是B的行。 思考: 将A转置为B,就是将A的三元组表a.data置换为表B的三元组表b.data,如果只是简单地交换a.data中i和j的内容,那么得到的b.data将是一个按列优先顺序存储的稀疏矩阵B,要得到按行优先顺序存储的b.data,就必须重新排列三元组的顺序。 由于A的列是B的行,因此,按a.data的列序转置,所得到的转置矩阵B的三元组表b.data必定是按行优先存放的。; 按这种方法设计的算法,其基本思想是:对A中的每一列 col(0≦col≦n-1),通过从头至尾扫描三元表a.data,找出所有列号等于col的那些三元组,将它们的行号和列号互换后依次放入b.data中,即可得到B的按行优先的压缩存储表示。 ;void transmatrix (tabletype sa, tabletype *sb) { int p q v; sb-md = sa.nd; sb-nd = sa.md; sb-td = sa.td; if (sb-td != 0) { q = 0; // q为sb.data的下标 for (v=0; v sa.nd; v++) { for (p=0; psa.td; p++) // p为sa.data的下标 {if (sa.data[p].j == v) // 以sb.dat

您可能关注的文档

文档评论(0)

ayangjiayu1 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档