- 1、本文档共29页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
软件技术与基础2_3
第二 章基本数据结构及其运算 *2.4 数组 2.4.1 数组的顺序存储结构 2.4.2 规则矩阵的压缩 2.4.3 一般稀疏矩阵的表示 2.4.1 数组的顺序存储 一、数组的定义 数组是相同类型数据元素的有限集合; 数组中的各个分量称为数组元素; 每个数组元素值可以用数组名和一个下标值唯一地确定; 二、逻辑结构的形式定义 二维数组 2_Array=(D,R) D 是某种数据类型的有限元素集合,且 D={ aij|i=c1,d1,j=c2,d2,aij ?D0} R是行、列关系的有限集合,且 R={ ROW , COL },又 ROW={ aij,aij+1|c1?i?d1,c2?j?d2-1, aij, aij+1 ? D0 } COL={ aij,ai+1j|c1?i?d1-1,c2?j?d2, aij, ai+1j ? D0 } ci 是第i维的下界 dj 是第j维的上界 两维数组的元素个数为: (d1-c1+1)*(d2-c2+1) 三、数组的操作 数组有两种基本的操作: 给定下标,存取相应的数组元素; 给定下标,修改相应数组元素的值。 四、数组的顺序存储结构 数组元素是连续存放的,因此采用顺序存储结构。 无论几维数组,在计算机中都是按一维数组来存放。数组存放通常采用两种方式: 按行优先顺序(Pascal,C) 按列优先顺序(Fortran) 1.按行优先顺序存储结构 例如:二维数组Am×n,可以看作m个行向量,每个行向量n个元素。数组中的每个元素由元素的两个下标表达式唯一确定。 地址计算公式: LOC(aij)=LOC(a11)+((i-1)×n+(j-1))×L 其中,L 是每个元素所占的存储单元。 二维数组按行优先存储举例 2.按列优先顺序存储结构 按列优先顺序存放是将数组看作若干个列向量。 例如,二维数组Amxn,可以看作n个列向量,每个列向量m个元素。数组中的每个元素由元素的两个下标表达式唯一确定。 二维数组按列优先存储举例 LOC(a23)= LOC(a11)+(3-1)* 4+(2-1)= 10 LOC(a34)= 1 + (4-1)* 4 + (3-1) = 15 LOC(a14)= 1 + (4-1)* 4 + (1-1) = 13 2.4.2 数组的压缩存储 实际工程问题中推导出的数组常常是高阶、含大量零元素的矩阵,或者是一些有规律排列的元素。为了节省存储空间,通常是对这类矩阵进行压缩存储。 压缩的含义是: 相同值的多个元素占用一个存储单元; 零元素不分配存储单元。 一、能够采用压缩存储的矩阵 对称矩阵:存储主对角线以上(下)的元素; 上(下)三角矩阵:只存储三角阵元素; 带状矩阵:只存储带状元素; 稀疏矩阵:只存储非零元素; 二、下三角矩阵的压缩存储 开辟一个长度为n(n+1)/2的一维数组B,然后一行接一行地依次存放A中下三角部分的元素。 以行为主压缩存储 以列为主压缩存储 三、对称矩阵的压缩存储 对称矩阵的元素满足:aij = aji 1 ≤ i ,j ≤ n 因此将n*n 个元素压缩存放到 n(n+1)/2 个单元的一维数组S((n+1)*n/2)中。 (按行存放)aij的地址为: 对称矩阵的压缩存储举例 存于一维数组S[6] S[6]=( a11, a21, a22, a31, a32, a33 ) 1 2 3 4 5 6 LOC(a31)=3(3-1)/2+1= 4 LOC(a22)=2(2-1)/2+2= 3 LOC(a21)=2(2-1)/2+1= 2 四、对角矩阵的压缩存储 在三对角矩阵中,三条对角线以外的元素均为零,并且,除了第一行与最后一行外,其他每一行均只有三个元素为非零,因此,n阶三对角矩阵共有3n-2个非零元素。 对角矩阵的压缩存储 以行为主存放 : 2.4.3 一般稀疏矩阵的表示 如果一个矩阵中绝大多数的元素值为零,只有很少的元素值非零,则称该矩阵为稀疏矩阵 。 一、三列二维数组表示 (1)非零元素所在的行号i; (2)非零元素所在的列号j; (3)非零元素的值V。 即每一个非零元素可以用下列三元组表示: (i,j,V) 例如,上述稀疏矩阵A中的8个非零元素可以用以下8个二元组表示(以行为主的顺序排列): (1,3,3) (1,8,1)(3,1,9)(4,5,
文档评论(0)