- 1、本文档共53页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1-中南大学
数组可以看成是一种特殊的线性结构(逻辑上的线性结构),即线性表中数据元素本身也是一个线性表,是对前面学过的线性表的扩充。 (注:几乎所有的程序设计语言都已把数组类型设定为固有类型) 1.一维数组 一维数组可以看成是一个线性表或一个向量(第2章已经介绍),它在计算机中是存放在一块连续的存储单元中,适合于随机查找。这在第2章的线性表的顺序存储结构中已经介绍。 二维数组也可以看成是一个线性表(列向量表,或行向量表):A=(a0,a1,……,an-1) (1)其中每个数据元素aj是一个列向量形式的线性表 A=(a0, a1, ……, an-1) 或者,可以看成是一个线性表:A=(a0,a1,……,am-1) 其中每个数据元素aj是一个行向量形式的线性表 三维数组:一个定长的线性表,每个元素是一个二维数组 一本书 同理,n维数组可以看成是一个定长的线性表, 它的每个数据元素也是n-1维的数组。 n维数组最多可有n个直接前驱和n个直接后继。 特点:n 维数组是 n 个线性关系的组合。 ADT定义: 数据对象:有限个相同类型数据元素的集合。 数据关系:n 个方向上线性关系的组合。 基本操作: 初始化:InitArray(A,n,bound1,…,boundn) 销 毁:DestroyArray(A) 取 值:Value(A,e,index1,…,indexn) 赋 值:Assign (A,e,index1,…,indexn) 顺序存储:数组的基本操作为初始化,取值,赋值,即多为访问操作,而一般都不做插入和删除操作。 由于计算机内存结构是一维的(线性的),因此,用一维内存存放多维数组就必须按某种次序将数组元素排成一个线性序列,然后将这个线性序列顺序存放在存储器中。 二维数组的顺序存储有两种形式: 以行序为主序 以列序为主序 二维数组元素存储位置的计算: 设二维数组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 5.3 矩阵的压缩存储 矩阵及矩阵运算在工程计算中用的很多。在高级语言中,一般都用二维数组来存储矩阵元。 在数值分析中,经常会出现矩阵中有许多值相同的元素或零元素。为了节省存储空间,可以对这类特殊矩阵进行压缩存储,以节省存储空间。如学生的选课表,航班表等等(大多数元素都不会被引用或访问) 结构化的特殊矩阵:如单位矩阵,对称矩阵,带状矩阵 非结构化的特殊矩阵:稀疏矩阵 矩阵的压缩存储 若ij,数组元素A[i][j]在矩阵的上三角部分,在数组B中没有存放,可以找它的对称元素 A[j][i] =j*(j+1)/2+i。 若i≤j,数组元素A[i][j]在数组B中的存放位置为n+(n-1)+(n-2)+….+(n-i+1)+j-i= (2*n-i+1)*i/2+j-i=(2*n-i-1)*i/2+j 若ij,数组元素A[i][j]在矩阵的下三角部分,在数组B中没有存放。因此,找它的对称元素A[j][i]。A[j][i]在数组B的第(2*n-j-1)*j/2+i的位置中找到。 带状矩阵的压缩存储 三对角矩阵中除主对角线及在主对角线上下最临近的两条对角线上的元素外,所有其它元素均为0,总共有3n-2个非零元素。 将三对角矩阵A中三条对角线上的元素按行存放在一维数组B中,且a00存放于B[0]。 在三条对角线上的元素aij 满足: 0≤i ≤n-1, i-1 ≤ j ≤ i+1 在一维数组B中A[i][j]在第i行,它前面有3*i-1个非零元素,在本行中第j列前面有j-i+1个,所以元素A[i][j]在B中位置为k=2*i+j。 稀疏矩阵的压缩存储 矩阵中有大量的元素等于0(或常量) 。 稀疏矩阵的定义 设矩阵Am×n中有t个非零元素,若t远远小于矩阵元素的总数m×
文档评论(0)