数据结构与算法分析:第4章 数组和广义表.ppt

数据结构与算法分析:第4章 数组和广义表.ppt

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

第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)

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

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

1亿VIP精品文档

相关文档