java数据结构与算法.ppt
《java数据结构与算法.ppt》由会员分享,可在线阅读,更多相关《java数据结构与算法.ppt(23页珍藏版)》请在优知文库上搜索。
1、 4.1.1 数组定义数组定义 数组是数据结构的基本结构形式,它是一种顺序式的结构,数组是存储同一类型数据的数据结构,使用数组时需要定义数组的大小和存储数据的数据类型,数组分为一维数组和多维数组。数组的维数是由数组的下标的个数确定的,一个下标称为一维数组,一个下标以上的数组称为多维数组。从这个意义上讲,确定了对于数组的一个下标总有一个相应的数值与之对应的关系;或者说数组是有限个同类型数据元素组成的序列。 数组的基本操作包括: initarray(&A); /初始化数组 destroyarray(&A); /销毁数组 assign(&A,e); /数组赋值 value(A,&e); /取数组的某
2、个元素 copyarray(M,&T); /复制一个数组 printarray(M); /打印数组的元素 4.1.1 数组定义数组定义一维数组一维数组一维数组是指下标的个数只有一个的数组,一维数组是指下标的个数只有一个的数组,有时称为向量,是最基本的数据类型,在有时称为向量,是最基本的数据类型,在java 中需要事先声名,程序才能够在编译中需要事先声名,程序才能够在编译过程中预留内存空间。声明的格式一般是:过程中预留内存空间。声明的格式一般是: = new ; 4.1.1 数组定义数组定义多维数组多维数组多维数组是指下标的个数有两个以上,我们多维数组是指下标的个数有两个以上,我们比较常用的是二
3、维数组(因为三维以上的数比较常用的是二维数组(因为三维以上的数组存储可以简化为二维数组的存储)。下面组存储可以简化为二维数组的存储)。下面以二维数组为例说明多维数组。二维数组的以二维数组为例说明多维数组。二维数组的声明同一维数组。格式为:声明同一维数组。格式为: =new size1 size2;4.1.2 数组的存储数组的存储一维数组的存储一维数组的数据存储按照顺序存储,逻辑地址和物理地址都是连续的。如果已知第一个数据元素的地址loc(a1),则第i个元素的地址loc(ai)为:loc(ai)=loc(a1)+(i-1)*c假设数组的下标从1开始,只要求出第i个元素之前存放了多少个数据元素即
4、可(实际上有i-1个元素),每个元素占有c个存储单元,再乘以c,就是第i个元素的起始地址。如果下标从0开始,则第i个元素之前就有i个元素,此时上面的公式就变为:loc(ai)=loc(a1)+ i*c由此可见,求数组中数据元素的地址,已知条件必须是知道第一个元素的地址,然后主要是找出该元素之前已经存储了多少个数据元素。在一维数组中,只要知道任何一个元素的地址即可求出其它元素的地址,但在多维数组中,已知条件必须是第一个数据元素地址。 4.1.2 数组的存储数组的存储多维数组以二维数组的顺序存储为例说明,二维数组在顺序存储时一般有两种:行优先顺序:存储时先按行从小到大的顺序存储,在每一行中按列号从
5、小到大存储。列优先顺序:存储时先按列从小到大的顺序存储,在每一列中按行号从小到大存储。以上的两种存储顺序中,第一个被存放的元素总是第一行第一列的数据元素,所以该元素的地址是我们的已知条件。同样在二维数组中比较典型的是计算数据的存储位置。 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)*
6、n个数据元素,在第i行元素中,j列之前有j-1个数据元素,共有(i-1)*n+j-1个元素,每个元素占有c个存储单元,只要乘以c就可以了。其中loc(aij)表示第i 行第j列数据元素的内存的起始位置,loc(a11)表示第一个数据元素的内存位置,c表示每个数据元素所占有的内存空间的大小,如果下标从0开始,只要不用减1即可。 4.1.2 数组的存储数组的存储多维数组如果按列优先顺序存储,则地址的计算为:loc(aij)=loc(a11)+(j-1)*m+i-1*c假设下标从1开始,其中loc(aij)表示第i 行第j列的数据元素的内存起始位置,loc(a11)表示第一个数据元素的内存位置,c表
7、示每个数据元素所占有的内存空间的大小;主要还是计算第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即可。读者可以从以上的地址公式中可以找出一定的地址计算规律:多维数组中按行优先计算公式用一个下标乘以后面的最大值。 4.1.3
8、显示二维数组的内容显示二维数组的内容一般情况下,只要定义了数组的存储顺序,一般情况下,只要定义了数组的存储顺序,数组的存储顺序就不会改变了,所以对数组数组的存储顺序就不会改变了,所以对数组的各种操作后,应按照数组的已定义的存储的各种操作后,应按照数组的已定义的存储顺序存储;也就是说,如果是按行优先顺序顺序存储;也就是说,如果是按行优先顺序存储,在对数组操作后,即使改变了存储顺存储,在对数组操作后,即使改变了存储顺序,应加以改变仍然按照行优先顺序存储。序,应加以改变仍然按照行优先顺序存储。 4.2.1 矩阵的压缩存储矩阵的压缩存储所谓矩阵的压缩存储,也就是在存储数组时,尽量所谓矩阵的压缩存储,也
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 数据结构 算法