java数据结构与算法.ppt

上传人:王** 文档编号:158919 上传时间:2023-02-27 格式:PPT 页数:23 大小:519.50KB
下载 相关 举报
java数据结构与算法.ppt_第1页
第1页 / 共23页
java数据结构与算法.ppt_第2页
第2页 / 共23页
java数据结构与算法.ppt_第3页
第3页 / 共23页
java数据结构与算法.ppt_第4页
第4页 / 共23页
java数据结构与算法.ppt_第5页
第5页 / 共23页
java数据结构与算法.ppt_第6页
第6页 / 共23页
java数据结构与算法.ppt_第7页
第7页 / 共23页
java数据结构与算法.ppt_第8页
第8页 / 共23页
java数据结构与算法.ppt_第9页
第9页 / 共23页
java数据结构与算法.ppt_第10页
第10页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《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 矩阵的压缩存储矩阵的压缩存储所谓矩阵的压缩存储,也就是在存储数组时,尽量所谓矩阵的压缩存储,也

9、就是在存储数组时,尽量减少存储空间,但是数组中的每个元素必须存储,减少存储空间,但是数组中的每个元素必须存储,所以在矩阵存储中,如果有规律可寻,只要存储其所以在矩阵存储中,如果有规律可寻,只要存储其中一部分,而另一部分的存储地址可以通过相应的中一部分,而另一部分的存储地址可以通过相应的算法将它计算出来,从而占有比较少的存储空间达算法将它计算出来,从而占有比较少的存储空间达到存储整个矩阵的目的,称为矩阵的压缩存储。到存储整个矩阵的目的,称为矩阵的压缩存储。矩阵的压缩存储仅是针对特殊矩阵的;而对于没有矩阵的压缩存储仅是针对特殊矩阵的;而对于没有规律可循的二维数组则不能够使用压缩存储。规律可循的二维

10、数组则不能够使用压缩存储。二维数组(矩阵)的压缩存储一般有三种,它们分二维数组(矩阵)的压缩存储一般有三种,它们分别是对称矩阵、稀疏矩阵和三角矩阵。三种矩阵中别是对称矩阵、稀疏矩阵和三角矩阵。三种矩阵中以稀疏矩阵比较常见。以稀疏矩阵比较常见。 4.2.1 矩阵的压缩存储矩阵的压缩存储特殊矩阵特殊矩阵若若n 阶矩阵阶矩阵A中的元素满足以下条件:中的元素满足以下条件:aij=aji i1,j1则称为则称为n阶对称矩阵。阶对称矩阵。对于对称矩阵,如果不采用压缩存储,占有的存储对于对称矩阵,如果不采用压缩存储,占有的存储单元有单元有n2个,因为是对称矩阵,所以只要存储对角个,因为是对称矩阵,所以只要存

11、储对角的数据元素和一半的数据元素即可,占有的存储单的数据元素和一半的数据元素即可,占有的存储单元有元有n(n-1)/2个存储单元中。如果我们以行序个存储单元中。如果我们以行序为主序存储其下三角(包括对角线)的元素,其上为主序存储其下三角(包括对角线)的元素,其上三角的元素可以推算出来。三角的元素可以推算出来。4.2.1 矩阵的压缩存储矩阵的压缩存储特殊矩阵特殊矩阵如果用一维数组存储一个对称矩阵,只要将如果用一维数组存储一个对称矩阵,只要将对称矩阵存储在一个最大下标为对称矩阵存储在一个最大下标为n(n-1)/2的一维数组的一维数组S中即可。此时按照行优先顺中即可。此时按照行优先顺序存储,数据元素

12、序存储,数据元素aij与数组与数组S的下标的下标k的对的对应关系为:应关系为: i(i-1)/2 +j-1 当当ij时时 k= j(j-1)/2 + i-1 当当ij时时4.2.1 矩阵的压缩存储矩阵的压缩存储特殊矩阵特殊矩阵对于任意给定的一组下标(对于任意给定的一组下标(i,j),均可在),均可在S中找中找到元素到元素aij,反之,对所有元素都能够确定在,反之,对所有元素都能够确定在S中位中位置,当置,当ij时,根据对称矩阵的性质推算即可。由时,根据对称矩阵的性质推算即可。由此可以看出对称矩阵的存储可以使用一维数组此可以看出对称矩阵的存储可以使用一维数组S存存储,占用的空间不再是储,占用的空

13、间不再是n2,而是,而是n(n-1)/2空间空间减少了接近一半,实现了二维数组的压缩存储。减少了接近一半,实现了二维数组的压缩存储。所谓对角矩阵是指,矩阵的所有非零元素都集中在所谓对角矩阵是指,矩阵的所有非零元素都集中在以主对角线为中心的带状区域中,即除了主对角线以主对角线为中心的带状区域中,即除了主对角线上和直接在主对角线上、下方若干条对角线上的元上和直接在主对角线上、下方若干条对角线上的元素之外,其余元素皆为零。素之外,其余元素皆为零。 4.2.1 矩阵的压缩存储矩阵的压缩存储特殊矩阵特殊矩阵也可以按照某个原则(或者以行序为主序,或者以列序为主也可以按照某个原则(或者以行序为主序,或者以列

14、序为主序,或者按对角线的顺序)将对角矩阵序,或者按对角线的顺序)将对角矩阵B的所有非零元素压缩的所有非零元素压缩存储到一个一维数组存储到一个一维数组LTB13n-2中。这里不妨仍然以行序中。这里不妨仍然以行序为主序的原则对为主序的原则对B进行压缩存储,当进行压缩存储,当B中任一非零元素中任一非零元素bij与与LTBk之间存在着如下一一对应关系:之间存在着如下一一对应关系:k=2*i+j-2时,则有时,则有bij=LTBk。称。称LTB13n-2为对角矩阵为对角矩阵B的压缩的压缩存储。存储。上面讨论的几种特殊矩阵中,非零元素的分布都具有明显的上面讨论的几种特殊矩阵中,非零元素的分布都具有明显的规

15、律,因而都可以被压缩存储到一个一维数组中,并能够确规律,因而都可以被压缩存储到一个一维数组中,并能够确定这些矩阵的每个非零元素在一维数组中的存储位置。但是,定这些矩阵的每个非零元素在一维数组中的存储位置。但是,对于那些非零元素在矩阵中的分布没有规律的特殊矩阵对于那些非零元素在矩阵中的分布没有规律的特殊矩阵(如稀如稀疏矩阵疏矩阵),则需要寻求其他方法来解决压缩存储问题。,则需要寻求其他方法来解决压缩存储问题。 4.2.1 矩阵的压缩存储矩阵的压缩存储稀疏矩阵稀疏矩阵对稀疏矩阵很难下一个确切的定义,它只是一个凭对稀疏矩阵很难下一个确切的定义,它只是一个凭人们的直觉来理解的概念。一般认为,一个较大的

16、人们的直觉来理解的概念。一般认为,一个较大的矩阵中,零元素的个数相对于整个矩阵元素的总个矩阵中,零元素的个数相对于整个矩阵元素的总个数所占比例较大时,该矩阵就是一个稀疏矩阵。例数所占比例较大时,该矩阵就是一个稀疏矩阵。例如,有一个如,有一个66阶的矩阵阶的矩阵A,其,其36个元素中只有个元素中只有8个非零元素,那么,可以称矩阵个非零元素,那么,可以称矩阵A为稀疏矩阵。为稀疏矩阵。稀疏矩阵一般是指矩阵中的大部分元素为零,仅有稀疏矩阵一般是指矩阵中的大部分元素为零,仅有少量元素非零的矩阵称为稀疏矩阵;或者说矩阵少量元素非零的矩阵称为稀疏矩阵;或者说矩阵A(m n)中有)中有S个非零元素,如果个非零元素,如果S远远小于矩远远小于矩阵的元素总数,称阵的元素总数,称A为稀疏矩阵。稀疏矩阵的存储为稀疏矩阵。稀疏矩阵的存储一般只要保存非零元素即可,对于零元素可以不与一般只要保存非零元素即可,对于零元素可以不与保存,这样可以实现稀疏矩阵的压缩存储。保存,这样可以实现稀疏矩阵的压缩存储。 4.2.1 矩阵的压缩存储矩阵的压缩存储稀疏矩阵稀疏矩阵稀疏矩阵的压缩存储采用三元组的方法实现。其存储规则如稀疏矩阵

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > Java

copyright@ 2008-2023 yzwku网站版权所有

经营许可证编号:宁ICP备2022001189号-2

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!