《数组和广义表》PPT课件.ppt
《《数组和广义表》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《数组和广义表》PPT课件.ppt(60页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第5章章数组和广义表数组和广义表 元素的值并非原子类型,可以再分解,表中元素元素的值并非原子类型,可以再分解,表中元素也是一个线性表(即广义的线性表)。也是一个线性表(即广义的线性表)。所有数据元素仍属所有数据元素仍属同一数据类型。同一数据类型。5.1 数组的定义数组的定义5.2 数组的顺序表示和实现数组的顺序表示和实现5.3 矩阵的压缩存储矩阵的压缩存储5.4 广义表的定义广义表的定义5.5 广义表的存储结构广义表的存储结构数组和广义表的特点:数组和广义表的特点:一种特殊的线性表一种特殊的线性表5.1数组的定义数组的定义数组:数组:由一组名字相同、下标不同的变量构成由一组名字相同、下标不同
2、的变量构成注意:注意:本章所讨论的数组与高级语言中的数组有所区别:高本章所讨论的数组与高级语言中的数组有所区别:高级语言中的数组是顺序结构;而级语言中的数组是顺序结构;而本章的数组既可以是顺序的,本章的数组既可以是顺序的,也可以是链式结构,也可以是链式结构,用户可根据需要选择。用户可根据需要选择。答:答:对的对的。因为:。因为:数组中各元素具有数组中各元素具有统一的类型统一的类型;数组元素的下标一般具有数组元素的下标一般具有固定的上界和下界固定的上界和下界,即数组一,即数组一旦被定义,它的维数和维界就不再改变。旦被定义,它的维数和维界就不再改变。数组的数组的基本操作比较简单基本操作比较简单,除
3、了结构的初始化和销毁之,除了结构的初始化和销毁之外,只有存取元素和修改元素值的操作。外,只有存取元素和修改元素值的操作。讨论:讨论:“数组的处理比其它复杂的结构要简单数组的处理比其它复杂的结构要简单”,对吗?,对吗?二维数组的特点:二维数组的特点:二维数组的特点:二维数组的特点:一维数组的特点:一维数组的特点:1 1个下标,个下标,a ai i 是是a ai+1i+1的直接前驱的直接前驱2 2个下标,个下标,每个元素每个元素ai,j受到两个关系受到两个关系(行关系和列关系)的约束:(行关系和列关系)的约束:一个一个mn的二维数组可以的二维数组可以看成是看成是m行的一维数组,或行的一维数组,或者
4、者n列的一维数组。列的一维数组。N N维数组的特点:维数组的特点:n n个下标,个下标,每个元素受到每个元素受到n n个关系约束个关系约束一个一个n维数组可以看成是维数组可以看成是由若干个由若干个n1维数组组成的线性表。维数组组成的线性表。a11a12a1na21a22a2naijam1am2amnAmn=数组的抽象数据类型定义数组的抽象数据类型定义ADTArray数据对象数据对象:n是维数;bi是第i维的长度Daj1,j2,.,ji,jn|ji=0,.,bi-1,i=1,2,.,n数据关系数据关系:RR1,R2,.,RnRi|0jkbk-1,1kn且ki,0jibi-2,i=2,.,nADT
5、Array基本操作基本操作:基本操作基本操作:InitArray(&A,n,bound1,.,boundn)DestroyArray(&A)Value(A,&e,index1,.,indexn)Assign(&A,e,index1,.,indexn)InitArray(&A,n,bound1,.,boundn)操作结果:操作结果:若维数n和各维长度合法,则构造相应的数组A,并返回OK。DestroyArray(&A)操作结果:操作结果:销毁数组A。Value(A,&e,index1,.,indexn)初始条件:初始条件:A是n维数组,e为元素变量,随后是n个下标值。操作结果:操作结果:若各下标
6、不超界,则e赋值为所指定的A的元素值,并返回OK。Assign(&A,e,index1,.,indexn)初始条件:初始条件:A是n维数组,e为元素变量,随后是n个下标值。操作结果:操作结果:若下标不超界,则将e的值赋给所指定的A的元素,并返回OK。二维数组的定义二维数组的定义:数据对象数据对象:D=aij|0ib1-1,0jb2-1数据关系数据关系:R=ROW,COLROW=|0ib1-2,0jb2-1COL=|0ib1-1,0jb2-25.2 5.2 数组的顺序存储表示和实现数组的顺序存储表示和实现问题:问题:计算机的存储结构是一维的,而数组一般是多计算机的存储结构是一维的,而数组一般是多
7、维的,怎样存放?维的,怎样存放?解决办法:解决办法:事先约定按某种次序将数组元素排成一个事先约定按某种次序将数组元素排成一个序列,然后将这个线性序列存入存储器中。序列,然后将这个线性序列存入存储器中。例如:例如:在二维数组中,我们既可以规定按在二维数组中,我们既可以规定按行行存储,也存储,也可以规定按可以规定按列列存储存储。注意:注意:若规定好了次序,则数组中任意一个元素的存放地址便若规定好了次序,则数组中任意一个元素的存放地址便有规律可寻,可形成地址计算公式;有规律可寻,可形成地址计算公式;约定的次序不同,则计算元素地址的公式也有所不同;约定的次序不同,则计算元素地址的公式也有所不同;C C
8、和和PASCALPASCAL中一般采用行优先顺序;中一般采用行优先顺序;FORTRANFORTRAN采用列优先。采用列优先。例如:例如:称为基地址基地址或基址。以以“行序为主序行序为主序”的存储映象的存储映象二维数组A中任一元素ai,j的存储位置LOC(i,j)=LOC(0,0)+(b2ij)a0,1a0,0a0,2a1,0a1,1a1,2a0,1a0,0a0,2a1,0a1,1a1,2LL012345二维数组的顺序存储二维数组的顺序存储n n二维数组二维数组Amn按行优先按行优先寻址计算方法,寻址计算方法,每个数组元素占据每个数组元素占据L个地址单元。个地址单元。设数组的基址为设数组的基址为
9、设数组的基址为设数组的基址为LOC(aLOC(a1111):LOC(aij)=LOC(a11)+(i-1)*n+j-1)*L设数组的基址为设数组的基址为设数组的基址为设数组的基址为LOC(aLOC(a0000):LOC(aij)=LOC(a00)+(i*n+j)*L二维数组的顺序存储二维数组的顺序存储n n二维数组二维数组Amn按列优先按列优先寻址计算方法,寻址计算方法,每个数组元素占据每个数组元素占据L个地址单元。个地址单元。设数组的基址为设数组的基址为设数组的基址为设数组的基址为LOC(aLOC(a1111):LOC(aij)=LOC(a11)+(j-1)*m+i-1)*L设数组的基址为设
10、数组的基址为设数组的基址为设数组的基址为LOC(aLOC(a0000):LOC(aij)=LOC(a00)+(j*m+i)*L例例1.二维数组二维数组A的每个元素是由的每个元素是由6个字符组成的个字符组成的串,设每个字符占一个字节。其行下标串,设每个字符占一个字节。其行下标i=0,1,8,列下标列下标j=1,2,10。若。若A按行优先按行优先存储,元素存储,元素A8,5的起始地址与当的起始地址与当A按列优按列优先存储时的元素(先存储时的元素()的起始地址相同。)的起始地址相同。A.A8,5B.A3,10A.A8,5B.A3,10C.A5,8D.A4,10C.A5,8D.A4,10例例2.二维数
11、组二维数组N的每个元素占的每个元素占4个存储单元,个存储单元,行下标行下标i的范围从的范围从0到到4,列下标,列下标j的范围从的范围从0到到5,N按行存储时元素按行存储时元素N35的起始地址的起始地址与与N按列存储时元素(按列存储时元素()的起始地址相同。)的起始地址相同。A.N24A.N24B.N34B.N34C.N35C.N35D.N44D.N44可见,无论规定按行优先或按列优先,可见,无论规定按行优先或按列优先,只要知道以下三要素便可随时求出任只要知道以下三要素便可随时求出任一元素的地址(一元素的地址(这样数组中的任一元这样数组中的任一元素便可以随机存取!素便可以随机存取!):开始结点的
12、存放地址(即基地址);开始结点的存放地址(即基地址);维数和每维的长度(上、下界);维数和每维的长度(上、下界);每个数组元素所占用的单元数。每个数组元素所占用的单元数。二维数组二维数组 三维数组三维数组行向量行向量下标下标j页向量页向量下标下标i列向量列向量下标下标k行向量行向量下标下标j列向量列向量下标下标k三维数组三维数组各维长度为各维长度为b1,b2,b3下标为下标为j1,j2,j3的数组元素的存储地址:的数组元素的存储地址:(按页(按页/行行/列存放)列存放)LOC(j1,j2,j3)=LOC(0,0,0)+(j1*b2*b3+j2*b3+j3)*l 前前j1页总页总元素个数元素个数
13、第第j1页的页的前前j2行行总总元素个数元素个数推广推广n维数组维数组各维长度为各维长度为b1,b2,b3,bn下标为下标为j1,j2,j3,jn的数组元素的存储的数组元素的存储地址:地址:LOC(j1,j2,jn)=a+(j1*b2*b3*bn+j2*b3*b4*bn+jn-1*bn+jn)*L 可得到n维数组数据元素存储位置的映象关系称为n维数组的映象函数。数组元素数组元素的存储位置是其下标的线性函数。的存储位置是其下标的线性函数。其中cn=L,ci-1=bici,1in。LOC(j1,j2,.,jn)=LOC(0,0,.,0)+cijii=1n前面若干元素占用前面若干元素占用的地址字节总
14、数的地址字节总数与所存元素个数与所存元素个数有关的系数,可有关的系数,可用递推法求出用递推法求出#include/提供宏提供宏va_start、va_end、va_arg#defineMAX_ARRAY_DIM8/假设最大维数为假设最大维数为8typedefstructELemType*base;/数组元素基址数组元素基址intdim;/数组维数数组维数int*bounds;/数组数组各维长度信息保存区的各维长度信息保存区的基址基址int*constants;/数组数组映像函数常量映像函数常量的基址的基址Array;即即Ci信息保存区信息保存区数组的基本操作函数说明(有数组的基本操作函数说明(
15、有5个)个)(请参阅教材(请参阅教材P93-95P93-95)n维数组的顺序存储表示维数组的顺序存储表示(见教材见教材P93P93)以初始化数组函数为例以初始化数组函数为例StatusInitArray(Array&A,intdim,)/若维数若维数dimdim和各维长度合法,则和各维长度合法,则构造相应的数组构造相应的数组构造相应的数组构造相应的数组A A A A并返回并返回OKOKif(dimMAX_ARRAY_DIM)returnERROR;A.dim=dim;A.bounds=(int*)malloc(dim*sizeof(int);if(!A.bounds)exit(OVERFLOW
16、);/若各维长度合法,则存入若各维长度合法,则存入A.bounds,A.bounds,并求出并求出A A的元素总数的元素总数elemtotalelemtotalelemtotal=1;va_start(ap,dim);/ap/ap为为va_listva_list类型,是存放变长参数表信类型,是存放变长参数表信息的类型息的类型数组的基本操作函数说明(数组的基本操作函数说明(5个)个)(见教材见教材P93-95P93-95)for(i=0;idim;+i)A.boundsi=va_arg(ap,int);if(A.boundsi=0;-i)A.constantsi=A.boundsi+1*A.co
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组和广义表 数组 广义 PPT 课件
限制150内