- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章 多维数组 《数据结构与STL》 《数据结构与STL》 * 第四章 多维数组和广义表 学习内容: 4.1 多维数组 4.2 矩阵的压缩存储 4.4 实例分析 4.5 使用STL操作多维数组 《数据结构与STL》 * 4.1 多维数组 由类型相同的数据元素构成的有序集合。 对于k 维数组,每个元素都要受k个线性关系的约束。 数组一般不执行删除和插入操作,所以常采用顺序存储方法来存储数组。 通常有两种存储方式:行优先存储和列优先存储。 《数据结构与STL》 * 行优先存储—— 按行存储,即存完第i行再接着存储第i+1行。 按行优先顺序存储二维数组Amn,线性a11,a12,…,a1n,a21,a22,…,a2n,…,am1,am2,…,amn Loc(aij) =Loc(a11) + ((i-1)*n + j-1)*c 在C++、PASCAL等语言中,数组都是按行优先存储的 《数据结构与STL》 * 列优先存储—— 按列存储,即存完第i列再接着存储第i+1列。 存储二维数组Amn,按列优先顺序存储的线性序列为: a11,a21,…,am1,a12,a22,…,am2,…,a1n,a2n,…,amn Loc(aij)=Loc(a11)+ (i-1 + m*(j-1))*c 在FORTRAN语言中,数组是按列优先存储的 三维数组示意: Amnp m--片,n--行,p--列 行优先方式:先排最右端的下标,从右向左。 1 2 ……m n p 先排第一片第一行…… 第一片第二行…… …… 第n行…… 第二片第一行…… 第二行…… …… m 《数据结构与STL》 * 多维数组的存储 C++中设三维数组Amnp,第一个元素为a000, 若按行优先存储,则aijk前面共有i×n×p+j×p+k个元素; 若按列优先存储,则aijk前面共有i+m×j+m×n×k个元素; 试分析四维数组或更高维数组的行优先存储和列优先存储。 《数据结构与STL》 * 第四章 多维数组 学习内容: 4.1 多维数组 4.2 矩阵的压缩存储 4.3 广义表 4.4 实例分析 4.5 使用STL操作多维数组 《数据结构与STL》 * 4.2 矩阵的压缩存储 矩阵是一种常见的处理对象 矩阵可看作是二维数组 对于一些数据元素具有特殊规律的矩阵,常常采用一些特殊的存储方法以节省存储空间 对称矩阵 特殊矩阵压缩存储 三角矩阵 对角矩阵 稀疏矩阵压缩存储 《数据结构与STL》 * 对称矩阵 共需要存储的元素数目 设所有元素存储到一维数组Sa中, aij存储在Sa[k]中,k 与 ij 的关系? k = i(i+1)/2 + j (i≥j) 若aij位于矩阵的上三角,如何存储? 《数据结构与STL》 * 上三角中的元素aij(i<j),因为aij = aji , 则访问和它对应的元素aji即可: k=j(j+1)/2+i 。 思考: 设n阶对称矩阵按行优先方式存储下三角元素,元素a00存储在Sa[0]元素中,元素aij存储在Sa[100]元素中,则下标i、j的值为多少? 《数据结构与STL》 * 三角矩阵 三角矩阵分为上三角矩阵和下三角矩阵。 设n阶方阵A,若其下三角的元素除对角线外均为常数c,即aij=c,0≤j<i<n,则称该方阵为 上三角矩阵 对于n阶三角矩阵,需要存储n(n+1)/2+1个元素 《数据结构与STL》 * 按行优先存储n阶上三角矩阵,设aij存储到sa[k]中 若aij位于矩阵上三角,有0≤i≤j<n,则在存储aij之前, sa数组中首先要存储前i行上三角的元素,然后再存储aij所在行从aii到ai,j-1的元素 : 若aij位于矩阵下三角,有0≤j<i<n,此时所有的aij具有相同的值,只需保存1个值 k = n(n+1)/2 (0≤j<i<n) 《数据结构与STL》 * 思 考 按行优先存储n阶下三角矩阵时,首先存储下三角的元素,最后存储上三角的常数项c。给出aij与sa[k]的对应关系。 对于按列优先方式存储的n阶三角矩阵,请推导元素存储位置k与
文档评论(0)