- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
二维数组(矩阵)-Read.ppt
第4章 数组和广义表 4.1 多维数组 4.1.1 数组定义 数组是数据结构的基本结构形式,它是一种顺序式的结构,数组是存储同一类型数据的数据结构,使用数组时需要定义数组的大小和存储数据的数据类型,数组分为一维数组和多维数组。数组的维数是由数组的下标的个数确定的,一个下标称为一维数组,一个下标以上的数组称为多维数组。从这个意义上讲,确定了对于数组的一个下标总有一个相应的数值与之对应的关系;或者说数组是有限个同类型数据元素组成的序列。 数组的基本操作包括: initarray(A); //初始化数组 destroyarray(A); //销毁数组 assign(A,e); //数组赋值 value(A,e); //取数组的某个元素 copyarray(M,T); //复制一个数组 printarray(M); //打印数组的元素 4.1 多维数组 4.1.1 数组定义 一维数组 一维数组是指下标的个数只有一个的数组,有时称为向量,是最基本的数据类型,在java 中需要事先声名,程序才能够在编译过程中预留内存空间。声明的格式一般是: 数据类型 变量名称 [ ]= new 数据类型 [数组大小]; 4.1 多维数组 4.1.1 数组定义 多维数组 多维数组是指下标的个数有两个以上,我们比较常用的是二维数组(因为三维以上的数组存储可以简化为二维数组的存储)。下面以二维数组为例说明多维数组。二维数组的声明同一维数组。格式为: 数据类型 数组名称 [ ] [ ]=new 数据类型[size1] [ size2]; 4.1 多维数组 4.1.2 数组的存储 一维数组的存储 一维数组的数据存储按照顺序存储,逻辑地址和物理地址都是连续的。如果已知第一个数据元素的地址loc(a1),则第i个元素的地址loc(ai)为: loc(ai)=loc(a1)+(i-1)*c 假设数组的下标从1开始,只要求出第i个元素之前存放了多少个数据元素即可(实际上有i-1个元素),每个元素占有c个存储单元,再乘以c,就是第i个元素的起始地址。 如果下标从0开始,则第i个元素之前就有i个元素,此时上面的公式就变为: loc(ai)=loc(a1)+ i*c 由此可见,求数组中数据元素的地址,已知条件必须是知道第一个元素的地址,然后主要是找出该元素之前已经存储了多少个数据元素。在一维数组中,只要知道任何一个元素的地址即可求出其它元素的地址,但在多维数组中,已知条件必须是第一个数据元素地址。 4.1 多维数组 4.1.2 数组的存储 多维数组 以二维数组的顺序存储为例说明,二维数组在顺序存储时一般有两种: 行优先顺序:存储时先按行从小到大的顺序存储,在每一行中按列号从小到大存储。 列优先顺序:存储时先按列从小到大的顺序存储,在每一列中按行号从小到大存储。 以上的两种存储顺序中,第一个被存放的元素总是第一行第一列的数据元素,所以该元素的地址是我们的已知条件。 同样在二维数组中比较典型的是计算数据的存储位置。 4.1 多维数组 4.1.2 数组的存储 多维数组 假设二维数组是m*n的二维数组(共有m行,每行有n列)。第一个数据元素的地址是loc(a11),则第i行第j列的数据元素的地址的计算公式应为(按照行优先顺序存储): loc(aij)=loc(a11)+[(i-1)*n+j-1]*c 假设下标从1开始,我们需要计算出i行前面已经存储了i-1行元素,每行有n个元素,共有(i-1)*n个数据元素,在第i行元素中,j列之前有j-1个数据元素,共有(i-1)*n+j-1个元素,每个元素占有c个存储单元,只要乘以c就可以了。其中loc(aij)表示第i 行第j列数据元素的内存的起始位置,loc(a11)表示第一个数据元素的内存位置,c表示每个数据元素所占有的内存空间的大小,如果下标从0开始,只要不用减1即可。 4.1 多维数组 4.1.2 数组的存储 多维数组 如果按列优先顺序存储,则地址的计算为: loc(aij)=loc(a11)+[(j-1)*m+i-1]*c 假设下标从1开始,其中loc(aij)表示第i 行第j列的数据元素的内存起始位置,loc(a11)表示第一个数据元素的内存位置,c表示每个数据元素所占有的内存空间的大小;主要还是计算第i行j列元素之前有多少个数据元素。如果下标从0开始,只要不用减1即可。 按此公式可以推广到多维数组的数据元素的地址计算(假设按照行优先顺序存储): m行n 列纵标为k的三维数组,假设第一个元素的地址是loc(a111),如果按行优先顺序存储,i行j列纵标为p的数据元素的地址为(可以将它分解为二维数组): loc(aijp)=loc(a111)+[(i-1)*n*k+(j-1)*k +p-1]*c;
文档评论(0)