[工学]C语言第5章课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《[工学]C语言第5章课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 工学 语言 课件
- 资源描述:
-
1、第五章第五章 数组和广义表数组和广义表5.1 5.1 数组的类型定义数组的类型定义5.3 5.3 稀疏矩阵的压缩存储稀疏矩阵的压缩存储 5.2 5.2 数组的顺序表示和实现数组的顺序表示和实现5.4 5.4 广义表的类型定义广义表的类型定义5.5 5.5 广义表的表示方法广义表的表示方法5.6 5.6 广义表操作的递归函数广义表操作的递归函数5.7 5.7 本章小结本章小结5.8 5.8 习习 题题第五章第五章 数组和广义表数组和广义表5.1 数组的类型定义数组的类型定义 由于数组中各元素具有统一的类型,并且数组元素由于数组中各元素具有统一的类型,并且数组元素的下标一般具有固定的上界和下界,因
2、此,数组的处的下标一般具有固定的上界和下界,因此,数组的处理比其它复杂的结构更为简单。多维数组是向量的推理比其它复杂的结构更为简单。多维数组是向量的推广。例如,二维数组:广。例如,二维数组:00010,110111,11,01,11,1.nnm nmmmnaaaaaaAaaa(a)a01a11am-1,1a0,n-1a1,n-1am-1,n-1a00a10am-1,0Amn=(b)Amn=(a00,a01,a0,n-1),(a10,a11,a1,n-1),(am-1,0,am-1,1,am-1,n-1)(c)第五章第五章 数组和广义表数组和广义表typedef Elemtype array2m
3、n;等价于:等价于:typedef Elemtype array1n;typedef array1 array2m;一般地:多维数组的定义如下页所示:一般地:多维数组的定义如下页所示:第五章第五章 数组和广义表数组和广义表ADT Array 数据对象:数据对象:Daj1,j2,.,ji,jn|ji=0,.,bi-1,i=1,2,.,n 数据关系:数据关系:RR1,R2,.,Rn Ri|0 jk bk-1,1 k n 且且k i,0 ji bi-2,i=2,.,n 基本操作基本操作:ADT Array 第五章第五章 数组和广义表数组和广义表InitArray(&A,n,bound1,.,boun
4、dn)操作结果:若维数操作结果:若维数 n 和各维长度合法,构造相应的和各维长度合法,构造相应的数组数组A,并返回,并返回OK。DestroyArray(&A)操作结果:销毁数组操作结果:销毁数组A A。Value(A,&e,index1,.,indexn)初始条件:初始条件:A A是是n n维数组,维数组,e e为元素变量,随后是为元素变量,随后是n n 个个下标值。下标值。操作结果:操作结果:若各下标不超界,则若各下标不超界,则e e赋值为所指定的赋值为所指定的A A 的元素值,并返回的元素值,并返回OKOK。第五章第五章 数组和广义表数组和广义表Assign(&A,e,index1,.,
5、indexn)初始条件:初始条件:A A是是n n维数组,维数组,e e为元素变量,随后是为元素变量,随后是n n 个个下标值。下标值。操作结果:操作结果:若下标不超界,则将若下标不超界,则将e e的值赋给所指定的的值赋给所指定的A A的元素,并返回的元素,并返回OKOK。数组一旦被定义,它的维数和维界就不再改变。因数组一旦被定义,它的维数和维界就不再改变。因此,除了结构的初始化和销毁之外,数组只有存取元此,除了结构的初始化和销毁之外,数组只有存取元素和修改元素值的操作。素和修改元素值的操作。第五章第五章 数组和广义表数组和广义表二维数组的抽象定义二维数组的抽象定义:数据对象数据对象:D=ai
6、j|0ib1-1,0 jb2-1数据关系数据关系:R=ROW,COL ROW=|0ib1-2,0jb2-1 COL=|0ib1-1,0 jb2-2第五章第五章 数组和广义表数组和广义表5.2 数组的顺序表示和实现数组的顺序表示和实现类型特点类型特点:1)1)只有引用型操作,没有加工型操作只有引用型操作,没有加工型操作;2)2)数组是多维的结构,而存储空间是一个一维的结构。数组是多维的结构,而存储空间是一个一维的结构。有两种顺序映象的方式有两种顺序映象的方式:1)1)以行序为主序以行序为主序(低下标优先低下标优先););/我们所选择的我们所选择的2)2)以列序为主序以列序为主序(高下标优先高下标
7、优先););以以“行序为主序行序为主序”的存储映象的存储映象a0,1a0,0a0,2a1,0a1,1a1,2a0,1a0,0a0,2a1,0a1,1a1,2L第五章第五章 数组和广义表数组和广义表 按行序为主序存放按行序为主序存放01n-1m*n-1n am-1n-1 .am-11 am-10 .a1n-1 .a11 a10 a0n-1 .a01 a00 a00 a01 .a0n-1 a10 a11 .a1n-1 am-10 am-11 am-1n-1 .Loc(i,j)=Loc(0,0)+n*i+j*L第五章第五章 数组和广义表数组和广义表二维数组二维数组A A中任一元素中任一元素a aij
8、ij 的存储位置的存储位置 LOC(i,j)=LOC(i,j)=LOC(0,0)LOC(0,0)+(b(b2 2i ij)j)L L称为基地址或基址称为基地址或基址每个元素占每个元素占L个存储单元个存储单元已经存储的元素已经存储的元素数数LOC(jLOC(j1 1,j,j2 2)=LOC(0,0)+(b)=LOC(0,0)+(b2 2j j1 1j j2 2)L LLOC(jLOC(j1 1,j,j2 2,j,j2 2)=LOC(0,0,0)+(b)=LOC(0,0,0)+(b2 2b b3 3j j1 1b b3 3j j2 2j j3 3)L LLOC(j1,j2,.,jn)=LOC(0,
9、0,.,0)+(b2 b3 bn j1+b3 b4 bn j2+bn jn-1+jn)L第五章第五章 数组和广义表数组和广义表 推广到一般情况,可得到推广到一般情况,可得到 n n 维数组数据元素存储位维数组数据元素存储位置的映象关系:置的映象关系:nn-1ikni=1k=i+1(jb+j)*L LOC(j1,j2,.,jn)=LOC(0,0,.,0)+(b2 b3 bn j1+b3 bn j2+b4 bnj3+bn-1 bn jn-2+bn jn-1+jn)L =LOC(0,0,.,0)+=LOC(0,0,.,0)+niii=1c j其中其中 c cn=L=L,c ci-1=b=bi c c
10、i,1 i 1 i n n。(c c1,c c2,c c3,.,c cn-1,c cn)称为称为 n n 维数组的映象函数维数组的映象函数(常常量量)。数组元素的存储位置是其下标的线性函数。数组元素的存储位置是其下标的线性函数第五章第五章 数组和广义表数组和广义表c cn=L L,c cn-1 =b=bnL L=b=bnc cnc cn-2 =b=bn-1b bnL L=b=bn-1c cn-1c cn-3 =b=bn-2b bn-1b bnL L=b=bn-2c cn-2 c c3 =b=b4b b5 b bnL L=b=b4c c4 c c2=b=b3b b4b b5 b bnL L=b=
11、b3c c3c c1=b=b2b b3b b4b b5 b bnL L=b=b2c c2 c ci-1=b=bi c ciLnikkibC1设设第五章第五章 数组和广义表数组和广义表 容易看出,数组元素的存储位置是其下标的线容易看出,数组元素的存储位置是其下标的线性函数,一旦确定了数组的各维的长度,性函数,一旦确定了数组的各维的长度,c ci i 就是就是常数。由于计算各个元素存储位置的时间相等,所常数。由于计算各个元素存储位置的时间相等,所以存取数组中任一元素的时间也相等。我们称具有以存取数组中任一元素的时间也相等。我们称具有这一特点的存储结构为随机存储结构。这一特点的存储结构为随机存储结构
12、。第五章第五章 数组和广义表数组和广义表下面是数组顺序存储表示和实现下面是数组顺序存储表示和实现/-数组顺序存储表示数组顺序存储表示-#includestdarg.h/标准头文件标准头文件,提供一个类型提供一个类型va_list,三个宏三个宏va_start/va_arg 和和va_end 的定义的定义#define MAX_ARRAY_DIM 8 /假设数组的最大维数假设数组的最大维数typedef structElemType *base;/存储数组元素的首地址存储数组元素的首地址(基址基址),由由InitArray分配分配int dim;/数组的维数数组的维数int*bounds;/存放
13、数组维界的基地址存放数组维界的基地址,由由InitArray分配分配int*constants;/存放映象函数常量基址存放映象函数常量基址,由由InitArray分配分配 Array;第五章第五章 数组和广义表数组和广义表Status InitArray(Array&A,int dim,)/若维数若维数 dim 和各维长度合法,构造相应的数组和各维长度合法,构造相应的数组A,并返回,并返回OKif(dim MAX_ARRAY_DIM)return ERROR;A.dim=dim;A.bounds=(int*)malloc(dim*sizeof(int);if(!A.bounds)exit(OV
14、ERFLOW);/若各维长度合法若各维长度合法,则存入则存入A.bounds,并求出元素总数并求出元素总数elemtotalelemtotal=1;va_start(ap,dim);/ap为为va_list类型类型,存放变长参数表信息的数组存放变长参数表信息的数组for(i=0;idim;i+)A.boundsi=va_arg(ap,int);/-基本操作的实现算法基本操作的实现算法-第五章第五章 数组和广义表数组和广义表if(A.boundsi=0;i-)A.constantsi=A.boundsi+1*A.constantsi+1;return OK;/InitArray第五章第五章 数组
15、和广义表数组和广义表Status DestroyArray(Array&A)/销毁数组销毁数组Aif(!A.base)return ERROR;free(A.base);A.base=NULL;if(!A.bounds)return ERROR;free(A.bounds);A.bounds=NULL;if(!A.constants)return ERROR;free(A.constants);A.constants=NULL;return OK;/DestroyArray第五章第五章 数组和广义表数组和广义表Status Locate(Array A,va_list ap,int&off)/
16、若若ap所指下标合法所指下标合法,求出该下标对应元素在数组中的相对位置求出该下标对应元素在数组中的相对位置off=0;/最终最终off带回在存储该元素时已经存储的元素个数带回在存储该元素时已经存储的元素个数For(i=0;iA.dim;i+)ind=va_arg(ap,int);if(ind=A.boundsi)return(OVERFLOW);off+=A.constantsi*ind;return OK;/Locatecjiiioffdim1第五章第五章 数组和广义表数组和广义表Status Value(Array A,ElemType&e,)/如果用如果用VC实现实现/A是一数组,是一数
17、组,e为一元素变量,随后是为一元素变量,随后是n 个下标值。个下标值。/A和和e换顺序换顺序 /若各下标不超界,则若各下标不超界,则e赋值为所指定的赋值为所指定的A 的元素值,并返回的元素值,并返回OK。va_start(ap,e);/va_start(ap,A)if(result=Locate(A,ap,off)=0)return result;e=*(A.base+off);return OK;/ValueStatus Assign(Array&A,ElemType e,)va_start(ap,e);if(result=Locate(A,ap,off)=ji=j k=j k=j*(j-1
18、)/2+i-1 (j-1)/2+i-1 当当ijij a11 a21 a22 a31 an1 annk=0 1 2 3n(n-1)212)1(nn第五章第五章 数组和广义表数组和广义表2 2、三角矩阵、三角矩阵 以主对角线划分,三角矩阵有上三角和下三角两种。以主对角线划分,三角矩阵有上三角和下三角两种。上三角矩阵如图上三角矩阵如图a a所示,它的下三角(不包括主对角线)所示,它的下三角(不包括主对角线)中的元素均为常数。下三角矩阵正好相反,它的主对中的元素均为常数。下三角矩阵正好相反,它的主对角线上方均为常数,如图角线上方均为常数,如图b b所示。在大多数情况下,所示。在大多数情况下,三角矩阵
19、三角矩阵常数为零常数为零。a00 a01 a 0 n-1 a00 c c c a11 a 1 n-1 a10 a11 c .c c a n-1 n-1 an-1 0 an-1 1 an-1 n-1 (a)上三角矩阵 (b)下三角矩阵 第五章第五章 数组和广义表数组和广义表 三角矩阵中的重复元素三角矩阵中的重复元素c c可共享一个存储空间,可共享一个存储空间,其余的元素正好有其余的元素正好有n(n+1)/2n(n+1)/2个,因此,三角矩阵可压个,因此,三角矩阵可压缩存储到向量缩存储到向量sa0.n(n+1)/2sa0.n(n+1)/2中,其中中,其中c c存放在向量存放在向量的最后一个分量中。
20、的最后一个分量中。上三角矩阵中,主对角线之上的第上三角矩阵中,主对角线之上的第i i行行(0i n)(0i jij第五章第五章 数组和广义表数组和广义表 下三角矩阵的存储和对称矩阵类似,下三角矩阵的存储和对称矩阵类似,sak和和aij对应关系是:对应关系是:i(i+1)/2+j ij n(n+1)/2 ij 3、对角矩阵、对角矩阵 对角矩阵中,所有的非零元素集中在以主对角线为中心的带状区对角矩阵中,所有的非零元素集中在以主对角线为中心的带状区域中,即除了主对角线和主对角线相邻两侧的若干条对角线上的域中,即除了主对角线和主对角线相邻两侧的若干条对角线上的元素之外,其余元素皆为零。下图给出了一个三
21、对角矩阵,元素之外,其余元素皆为零。下图给出了一个三对角矩阵,a00 a01 a10 a11 a12 a21 a22 a23 .可用以行序为主序的可用以行序为主序的 an-2 n-3 an-2 n-2 an-2 n-1 an-1 n-2 an-1 n-1 形式存储形式存储 图图5.3 对角矩阵对角矩阵k=第五章第五章 数组和广义表数组和广义表 什么是稀疏矩阵?简单说,设矩阵什么是稀疏矩阵?简单说,设矩阵A A中有中有t t个非零个非零元素,若元素,若t t远远小于矩阵元素的总数(即远远小于矩阵元素的总数(即tmtmn n),),则称则称A A为稀疏矩阵为稀疏矩阵。定义稀疏因子定义稀疏因子:通常
22、认为通常认为 0.05 0.05 的矩阵为稀疏矩阵。的矩阵为稀疏矩阵。稀疏矩阵的压缩存储稀疏矩阵的压缩存储方法方法:三元组表示法三元组表示法 /三元组为:(行,列,值)三元组为:(行,列,值)nmt5.3.2 稀疏矩阵稀疏矩阵第五章第五章 数组和广义表数组和广义表例如,下列三元组表例如,下列三元组表(1,2,12),(1,3,9),(3,1,-3),(3,6,14),(4,3,24),(1,2,12),(1,3,9),(3,1,-3),(3,6,14),(4,3,24),(5,2,18),(6,1,15),(6,4,-7)(5,2,18),(6,1,15),(6,4,-7)加上行数加上行数6
23、6和列数和列数7 7便可作为下列矩阵便可作为下列矩阵M M的另一种的另一种描述。而由上述三元组表的不同表示方法可引出稀描述。而由上述三元组表的不同表示方法可引出稀疏矩阵不同的压缩存储方法。疏矩阵不同的压缩存储方法。0 12 9 0 0 0 0 0 0 3 0 0 15 0 0 0 0 0 0 0 12 0 0 0 18 0 -3 0 0 0 0 14 0 9 0 0 24 0 0 0 0 24 0 0 0 0 0 0 0 0 0 7 0 18 0 0 0 0 0 0 0 14 0 0 0 15 0 0 7 0 0 0 6 7 7 0 0 0 0 0 0图图5.4 5.4 稀疏矩阵稀疏矩阵M M
24、和和T T 0 0 0 0 0 0M=T=转置转置7 6 6第五章第五章 数组和广义表数组和广义表#define MAXSIZE 12500 /非零元素最大个数非零元素最大个数 typedef struct int i,j;/该非零元的行下标和列下标该非零元的行下标和列下标 ElemType e;/该非零元的值该非零元的值 Triple;/三元组类型三元组类型1.三元组顺序表三元组顺序表typedef struct Triple dataMAXSIZE+1;/非零元三元组表中非零元三元组表中0号单元未用号单元未用 int mu,nu,tu;/行、列及非零元个数行、列及非零元个数 TSMatri
25、x;/稀疏矩阵类型稀疏矩阵类型第五章第五章 数组和广义表数组和广义表i j e 1 2 12 1 3 9 3 1 -3 36 14 43 24 5 2 18 61 15 6 4 -7M.dataM.mu=6M.nu=7M.tu=87600070015000001800000240001400003000000000009120M第五章第五章 数组和广义表数组和广义表用常规的二维数组表示时的算法用常规的二维数组表示时的算法 其时间复杂度为其时间复杂度为:O(M.muM.M.nu)for(col=1;col=M.nu;+col)for(row=1;row=M.mu;+row)Tcolrow=Mro
展开阅读全文