网站大量收购闲置独家精品文档,联系QQ:2885784924

 数组和广义表.ppt

  1. 1、本文档共52页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
 数组和广义表

第5章 数组和广义表 5.1 数组的定义 5.2 数组的顺序表示和实现 5.3 矩阵的压缩存储 5.4 广义表的定义 5.5 广义表的存储结构 2.二维数组 二维数组中的每一个元素最多可有两个直接前驱和两个直接后继(边界除外),故是一种典型的非线性结构。例如,设A是一个有m行n列的二维数组,则A可以表示为: 二维数组可以看成是一个线性表 A=(a0,a1,……,an-1) 其中每个数据元素aj是一个列向量形式的线性表 A=(a0 , a1 , …… ,an-1) 或者,可以看成是一个线性表 A=(a0,a1,……,am-1) 其中每个数据元素aj是一个行向量形式的线性表 数组的操作 数组一旦被定义,它的维数和维界就不再改变,因此,除了结构的初始化和销毁之外,数组只有存取元素和修改元素值的操作。 怎样将数组中元素存入到计算机内存中呢? 由于计算机内存结构是一维的(线性的),因此,用一维内存存放多维数组就必须按某种次序将数组元素排成一个线性序列,然后将这个线性序列顺序存放在存储器中。 二维数组的顺序存储有两种形式: 二维数组元素存储位置的计算 设二维数组Am×n的起始地址(基地址),即a00的起始地址为LOC(0,0),每个数据元素占L个存储单元,则A中任一元素aij的起始地址为: 行优先顺序: LOC(i,j)=LOC(0,0)+(i*n+j)*L 列优先顺序: LOC(i,j)=LOC(0,0)+(j*m+i)*L 三维数组元素存储位置的计算 设三维数组Am×n×p的起始地址(基地址),即a000的起始地址为LOC(0,0,0),每个数据元素占L个存储单元,则A中任一元素aijk的起始地址为: 行优先顺序: LOC(i,j,k)=LOC(0,0,0)+(i*n*p+j*p+k)*L 列优先顺序: LOC(i,j,k)=LOC(0,0,0)+(k*m*n+j*m+i)*L 所以,数组元素是其下标的线性函数.由于计算各个元素存储位置的时间相等,所以存取数组中任一元素的时间也相等.我们称具有这一特点的存储结构为随机存储结构. 对称矩阵的压缩存储 为每一对对称元分配一个存储空间,则可将n2个元压缩存储到n(n+1)/2个元的空间中.以行优先存储其下三角(包括对角线)中的元. 2.三角矩阵 所谓下(上)三角矩阵是指矩阵的上(下)三角(不包括对角线)中的元均为常数c或零的n阶矩阵. 与对称矩阵类似,除了只存储其下(上) 三角中的元之外,再加一个存储常数c的存储空间即可. 图 三元组的结构 稀疏矩阵的三元组顺序表存储表示: #define MAXSIZE 12500?/*非零元素的最多个数*/ typedef struct { int i,j;? /*该非零元素的行下标和列下标*/ ????ElemType ?e; /*该非零元素的值*/ }Triple; typedef struct{ Triple? data[MAXSIZE+1];/* 非零元素的三元组 表。data[0]未用*/ ?? ?int mu,?nu,tu;/*矩阵的行数、列数和非零元素 的个数*/ }TSMatrix; 稀疏矩阵M对应的三元组表 稀疏矩阵T对应的三元组表 在三元组表存储结构下的 矩阵的转置运算 所谓的矩阵转置是指变换元素的位置,把位于(i,j)位置上的元素换到(j,i)位置上,也就是说,把元素的行列互换。如下图的6×7矩阵M,它的转置矩阵就是7×6的矩阵T,并且T(i,j)= M(j,i),其中,1≤i≤7 ,1≤j≤6。 算法分析 显然,稀疏矩阵的转置仍旧是稀疏矩阵。假设M和T分别表示矩阵M和T.如何由M得到T呢? 处理方法1:按照T.data中三元组的次序依次在M.data中找到相应的三元组进行转置.即,按照M的列序进行转置 Status TransposeSMatrix(TSMatrix M,TSMatrix T) {T.mu=M.nu;T.nu=M.mu;T.tu=M.tu; if(T.tu){q=1; for(col=1;col=M.nu;++col) for(p=1;p=M.tu;++p) if(M.data[p].j==col){ T.data[q].i=M.data[p].j; T.data[q].j=M.data[p].i; T.data[q].e=M.data[p].e;++q;} } return OK; } 处理方法2:按照M.data中三元组的次序依次进行转置,并将转置后的三元组置入T.data中恰当的位置. 为了能将待转置三元组M.data中元素一次定位到三元组

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档