数据结构 第5章.ppt
《数据结构 第5章.ppt》由会员分享,可在线阅读,更多相关《数据结构 第5章.ppt(62页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第5章章 数组和广义表数组和广义表 5.1 数组的定义和运算数组的定义和运算5.2 数组的顺序存储和实现数组的顺序存储和实现5.3 特殊矩阵的压缩存储特殊矩阵的压缩存储 5.4 广义表广义表 教学目的与要求:教学目的与要求:掌握三角矩阵的概念及其在计算机中的存储方法;掌握三角矩阵的概念及其在计算机中的存储方法;掌握稀疏矩阵的概念及其在计算机中的存储方法;掌握稀疏矩阵的概念及其在计算机中的存储方法;掌握稀疏矩阵的运算,如转置等;掌握稀疏矩阵的运算,如转置等;了解本章内容在数据结构中的作用,及其在数值分析了解本章内容在数据结构中的作用,及其在数值分析中的应用。中的应用。教学重点与教学难点:教学重
2、点与教学难点:三角矩阵的压缩存储;三角矩阵的压缩存储;稀疏矩阵的压缩存储及其转置运算。稀疏矩阵的压缩存储及其转置运算。5.1 数组的定义和运算数组的定义和运算 图图5.1 Amn的二维数组的二维数组 图图5.2 矩阵矩阵Amn看成看成n个列向量的线性表个列向量的线性表 图图5.3 矩阵矩阵Amn看成看成m个行向量的线性表个行向量的线性表 以以上上我我们们以以二二维维数数组组为为例例介介绍绍了了数数组组的的结结构构特特性性,实实际际上上数数组组是是一一组组有有固固定定个个数数的的元元素素的的集集合合。也也就就是是说说,一一旦旦定定义义了了数数组组的的维维数数和和每每一一维维的的上上下下限限,数数
3、组组中中元元素素的的个个数数就就固固定定了了。例例如如二二维维数数组组A34,它它有有3行行、4列列,即即由由12个个元元素素组组成成。由由于于这这个个性性质质,使使得得对对数数组组的的操操作作不不像像对对线线性性表表的的操操作作那那样样可可以以在在表表中中任任意意一一个个合合法法的的位位置置插插入入或或删删除除一一个个元元素素。对于数组的操作一般只有两类:对于数组的操作一般只有两类:(1)获得特定位置的元素值;获得特定位置的元素值;(2)修改特定位置的元素值。修改特定位置的元素值。基本操作:基本操作:(1)InitArray(A,n,bound1,boundn):若若维维数数n和和各各维的长
4、度合法,则构造相应的数组维的长度合法,则构造相应的数组A,并返回并返回TRUE。(2)DestroyArray(A):):销毁数组销毁数组A。(3)GetValue(A,e,index1,indexn):若若下下标标合合法法,则则用用e返返回回数数组组A中中由由index1,indexn所所指指定定的的元元素素的的值值。(4)SetValue(A,e,index1,indexn):若若下下标标合合法法,则则将将数数组组A中中由由index1,indexn所所指指定定的的元元素素的的值值置置为为e。这里定义的数组,与这里定义的数组,与C语言的数组略有不同,下标是从语言的数组略有不同,下标是从1开
5、始的。开始的。5.2 数组的顺序存储和实现数组的顺序存储和实现 数数组组的的顺顺序序存存储储结结构构有有两两种种:一一种种是是按按行行序序存存储储,如如高高级级语语言言BASIC、COBOL和和PASCAL语语言言都都是是以以行行序序为为主主;另另一一种种是是按按列列序序存存储储,如如高高级级语语言言中中的的FORTRAN语语言言就就是是以以列列序序为主显然,二维数组为主显然,二维数组Amn以行为主的存储序列为:以行为主的存储序列为:a11,a12,,a1n,a21,a22,a2n,am1,am2,amn而而以列为主的存储序列为:以列为主的存储序列为:a11,a21,,am1,a12,a22,
6、am2,a1n,a2n,amn 假设有一个假设有一个342的三维数组的三维数组A,共有共有24个元素,其逻个元素,其逻辑结构如图辑结构如图5.4所示。所示。图图5.4 三维数组的逻辑结构图三维数组的逻辑结构图 三三维维数数组组元元素素的的标标号号由由三三个个数数字字表表示示,即即行行、列列、纵纵三三个个方方 向向。a142表表 示示 第第 1行行,第第 4列列,第第 2纵纵 的的 元元 素素。如如 果果 对对A342(下下标标从从1开开始始)采采用用以以行行为为主主序序的的方方法法存存放放,即即行行下标变化最慢,纵下标变化最快,则顺序为:下标变化最慢,纵下标变化最快,则顺序为:a111,a11
7、2,a121,a122,a331,a332,a341,a342 采采用用以以纵纵为为主主序序的的方方法法存存放放,即即纵纵下下标标变变化化最最慢慢,行行下下标变化最快,标变化最快,则顺序为:则顺序为:a111,a211,a311,a121,a221,a321,a132,a232,a332,a142,a242,a342 以以上上的的存存放放规规则则可可推推广广到到多多维维数数组组的的情情况况。总总之之,知知道道了了多多维维数数组组的的维维数数,以以及及每每维维的的上上下下界界,就就可可以以方方便便地地将将多多维维数数组组按按顺顺序序存存储储结结构构存存放放在在计计算算机机中中了了。同同时时,根根
8、据据数数组组的的下下标标,可可以以计计算算出出其其在在存存储储器器中中的的位位置置。因因此此,数数组组的的顺顺序序存存储储是是一一种随机存取的结构。种随机存取的结构。以以二二维维数数组组Amn为为例例,假假设设每每个个元元素素只只占占一一个个存存储储单单元元,“以以行行为为主主”存存放放数数组组,下下标标从从1开开始始,首首元元素素a11的的地地址址为为Loc1,1,求求任任意意元元素素aij的的地地址址。aij是是排排在在第第i行行,第第j列列,并并且且前前面面的的第第i-1行行有有n(i-1)个个元元素素,第第行行第第j个个元元素素前前面面还有还有-个元素。由此得到如下地址计算公式:个元素
9、。由此得到如下地址计算公式:Loci,j=Loc1,1+n(i-1)+(j-1)根根据据计计算算公公式式,可可以以方方便便地地求求得得aij的的地地址址是是Loci,j。如如果果每每个元素占个元素占size个存储单元,则任意元素个存储单元,则任意元素aij的地址计算公式为:的地址计算公式为:Loci,j=Loc1,1+(n(i-1)+j-1)size 三维数组三维数组A(1.r,1.m,1.n)可以看成是可以看成是r个个mn的二维数组,的二维数组,如图如图5.5所示。所示。图图5.5 三维数组看成三维数组看成r个个mn的二维数组的二维数组 假假定定每每个个元元素素占占一一个个存存储储单单元元,
10、采采用用以以行行为为主主序序的的方方法法存存放放,即即行行下下标标r变变化化最最慢慢,纵纵下下标标n变变化化最最快快。首首元元素素a111的的地地址为址为Loc1,1,1,求任意元素求任意元素aijk的地址。的地址。显显然然,ai11的的地地址址为为Loci,1,1=Loc1,1,1+(i-1)mn,因因为为在在该该元元素素之之前前,有有-个个的的二二维维数数组组。由由ai11的的地地址址和和二二维维数数组组的的地地址址计计算算公公式式,不不难难得得到到三三维维数数组组任任意元素意元素aijk的地址:的地址:Loci,j,k=Loc1,1,1+(i-1)mn+(j-1)n+(k-1)其中其中1
11、i,1j,1k。如如果果将将三三维维数数组组推推广广到到一一般般情情况况,即即:用用j1、j2、j3代代替替数数组组下下标标i、j、k,并并且且j1、j2、j3的的下下限限为为c1、c2、c3,上上限限分分别别为为d1、d2、d3,每每个个元元素素占占一一个个存存储储单单元元,则则三三维维数数组组中中任任意意元素元素a(j1,j2,j3)的地址为:的地址为:Locj1,j2,j3=Locc1,c2,c3+l(d2-c2+1)(d3-c3+1)(j1-c1)+l(d3-c3+1)(j2-c2)+l(j3-c3)其中其中l为每个元素所占存储单元数。为每个元素所占存储单元数。令令1=l(d2-c2+
12、1)(d3-c3+1),2=l(d3-c3+1),3=1,则:则:Loc j1,j2,j3=Loc c1,c2,c3+1(j1-c1)+2(j2-c2)+3(j3-c3)=Locc1,c2,c3+i(ji-ci)(1i3)由公式可知由公式可知Locj1,j2,j3与与j1,j2,j3呈线性关系。呈线性关系。对对于于维维数数组组A(c1 d1,c2 d2,,cn dn),我我们们只只要要把把上上式式推推广广,就就可可以以容容易易地地得得到到维维数数组组中中任任意意元元素素aj1j2jn的的存存储地址的计算公式储地址的计算公式:其中(1in)。5.3 特殊矩阵的压缩存储特殊矩阵的压缩存储 5.3.
13、1 三角矩阵三角矩阵 三三角角矩矩阵阵大大体体分分为为三三类类:下下三三角角矩矩阵阵、上上三三角角矩矩阵阵和和对对称称矩矩阵阵。对对于于一一个个n阶阶矩矩阵阵A来来说说,若若当当ij时时,有有aij=0,则则称称此此矩矩阵阵为为上上三三角角矩矩阵阵;若若矩矩阵阵中中的的所所有有元元素素均均满满足足aij=aji,则称则称此矩阵为对称矩阵此矩阵为对称矩阵。图图5.6 下三角矩阵下三角矩阵A 对对于于下下三三角角矩矩阵阵的的压压缩缩存存储储,只只存存储储下下三三角角的的非非零零元元素素,对对于于零零元元素素则则不不存存。我我们们按按“行行序序为为主主序序”进进行行存存储储,得得到到的的序序列列是是
14、a11,a21,a22,a31,a32,a33,an1,an2,ann。由由于于下下三三角角矩矩阵阵的的元元素素个个数数为为n(n+1)/2,即:即:第第1行:行:1个个第第2行:行:2个个第第3行:行:3个个 第第n行:行:n个个 1+2+3+4+5+n=n(n+1)/2 所以可压缩存储到一个大小为所以可压缩存储到一个大小为n(n+1)/2的一维数组的一维数组C中,如图中,如图5.7所示。所示。图图5.7 三角矩阵的压缩形式三角矩阵的压缩形式 Loc(1,1)Loc(i,j)下三角矩阵中元素下三角矩阵中元素aij(ij)在一维数组在一维数组A中的位置为中的位置为(设每个元素占一个字节设每个元
15、素占一个字节):Loci,j=Loc1,1+前前i-1行行非非零零元元素素个个数数+第第i行行中中aij前前非非零零元元素素个个数数前前。i-1行行元元素素个个数数=1+2+3+4+(i-1)=i(i-1)/2,第,第i行中行中aij前非零元素个数前非零元素个数=j-1,所以有所以有Loci,j=Loc1,1+i(i-1)/2+j-1 同同样样,对对于于上上三三角角矩矩阵阵,也也可可以以将将其其压压缩缩存存储储到到一一个个大大小小为为n(n+1)/2的的一一维维数数组组C中中。其其中中元元素素aij(ij)在在数数组组C中中的的存存储储位置为:位置为:Loci,j=Loc1,1+j(j-1)/
16、2+i-1 对对于于对对称称矩矩阵阵,因因其其元元素素满满足足aij=aji,我我们们可可以以为为每每一一对对相相等等的的元元素素分分配配一一个个存存储储空空间间,即即只只存存下下三三角角(或或上上三三角角)矩矩阵阵,从而将从而将n2个元素压缩到个元素压缩到n(n+1)/2个空间中。个空间中。1.1.设设A A是是n*nn*n的的对对称称矩矩阵阵,将将A A的的对对角角线线及及对对角角线线上上方方的的元元素素以以列列为为主主的的次次序序存存放放在在一一维维数数组组B1.n(n+1)/2B1.n(n+1)/2中中,对对上上述述任任一一元元素素a aijij(1i(1i,jnjn,且且ij)ij)
17、在在B B中中的的位位置为置为()()。A.i(i-l)/2+j B.j(j-l)/2+i C.j(j-l)/2+i-1 D.i(i-l)/2+j-1A.i(i-l)/2+j B.j(j-l)/2+i C.j(j-l)/2+i-1 D.i(i-l)/2+j-1 2.ANAN,NN是对称矩阵,将下面三角(包括对角线)以行序存储到一维数组是对称矩阵,将下面三角(包括对角线)以行序存储到一维数组 T1.NT1.N(N+1N+1)/2/2中,则对任一上三角元素中,则对任一上三角元素aijaij对应对应TkTk的下标的下标k k是(是()。)。A.iA.i(i-1i-1)/2+j B.j/2+j B.j
18、(j-1j-1)/2+i C.i/2+i C.i(j-ij-i)/2+1 D.j/2+1 D.j(i-1i-1)/2+1/2+1 3.3.假设一个假设一个1515阶的上三角矩阵阶的上三角矩阵A A按行优先顺序压缩存储在一维数组按行优先顺序压缩存储在一维数组B B中,则非零元中,则非零元素素A A9,99,9在在B B中的存储位置中的存储位置k=_k=_。(。(注:矩阵元素下标从注:矩阵元素下标从1 1开始)开始)【北京工商大学北京工商大学 2001 2001】图图5.8 带状矩阵带状矩阵A 三对角带状矩阵有如下特点:三对角带状矩阵有如下特点:i=1,j=1,2;1in,j=i-1,i,i+1;
19、i=n,j=n-1,n;时,时,aij非零,其它元素均为零。非零,其它元素均为零。当5.3.2 带状矩阵带状矩阵 1.确定存储该矩阵所需的一维向量空间的大小确定存储该矩阵所需的一维向量空间的大小 在在这这里里我我们们假假设设每每个个非非零零元元素素所所占占空空间间的的大大小小为为1个个单单元元。从从图图中中观观察察得得知知,三三对对角角带带状状矩矩阵阵中中,除除了了第第一一行行和和最最后后一一行行只只有有2个个非非零零元元素素外外,其其余余各各行行均均有有3个个非非零零元元素素。由由此此得得到到,所所需需一一维维向向量量空空间间的的大大小小为为2+2+3(n-2)=3n-2,如图如图5.9所示
20、。所示。图图5.9 带状矩阵的压缩形式带状矩阵的压缩形式 2.确定非零元素在一维数组空间中的位置确定非零元素在一维数组空间中的位置 Loci,j=Loc1,1+前前i-1行行非非零零元元素素个个数数+第第i行行中中aij前前非非零零元元素素个个数数;前前i-1行元素个数行元素个数=3(i-1)-1(因为第因为第1行只有行只有2个非零元素);个非零元素);第第i行中行中aij前非零元素个数前非零元素个数=j-i+1,其中其中-1(ji)j-i=由此得到由此得到 Loci,j=Loc1,1+3(i-1)-1+j-i+1 =Loc1,1+2(i-1)+j-1 5.3.3 稀疏矩阵稀疏矩阵 图图5.1
21、0 稀疏矩阵稀疏矩阵 1.稀疏矩阵的三元组表表示法稀疏矩阵的三元组表表示法 图图5.11 三元组的结构三元组的结构 图图5.12 稀疏矩阵的三元组表表示稀疏矩阵的三元组表表示 三元组表所三元组表所需存储单元需存储单元个数为个数为3(t+1)其中其中t为非零为非零元个数元个数6 7 8 1 2 12 1 3 9 3 1 -3 3 6 14 4 3 24 5 2 18 6 1 15 6 4 -7 i j e0 1 2 3 4 5 6 7 8分别存放矩阵行列分别存放矩阵行列维数和非零元个数维数和非零元个数行列下标行列下标非零元值非零元值三元组表的类型说明如下:三元组表的类型说明如下:define M
22、AXSIZE 1000 /*非零元素的个数最多为非零元素的个数最多为1000*/typedef struct int row,col;/*该非零元素的行下标和列下标该非零元素的行下标和列下标*/ElementType e;/*该非零元素的值该非零元素的值*/Triple;typedef struct Triple dataMAXSIZE+1;/*非零元素的三元组表,非零元素的三元组表,data0未用未用*/int m,n,len;/*矩阵的行数、矩阵的行数、列数和非零元素的个数列数和非零元素的个数*/TSMatrix;1)用三元组表实现稀疏矩阵的转置运算用三元组表实现稀疏矩阵的转置运算 所所谓
23、谓的的矩矩阵阵转转置置,是是指指变变换换元元素素的的位位置置,把把位位于于(row,col)位位置置上上的元素换到(的元素换到(col,row)位置上,也就是说,位置上,也就是说,把元素的行列互换。把元素的行列互换。如如图图5.10所所示示的的67矩矩阵阵M,它它的的转转置置矩矩阵阵就就是是76的的矩矩阵阵N,并并且且N(row,col)=M(col,row),),其中,其中,1row7,1col6。采用矩阵的正常存储方式时,采用矩阵的正常存储方式时,实现矩阵转置的经典算法如下:实现矩阵转置的经典算法如下:void TransMatrix(ElementType sourcenm,Elemen
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 第5章
限制150内