数据结构经典课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据结构经典课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 经典 课件
- 资源描述:
-
1、第5章 数组和广义表 西安科技大学精品课程第第5 5章章 数组和广义表数组和广义表1 1教学目的:教学目的:掌握数组和广义表的定义、特点及典型算法。掌握数组和广义表的定义、特点及典型算法。2 2教学要求:教学要求:掌握数组在以行为主的存储结构中的地址计算方法。掌握数组在以行为主的存储结构中的地址计算方法。掌握矩阵实现压缩存储时的下标变换。掌握矩阵实现压缩存储时的下标变换。理解稀疏矩阵的两种存储方式的特点和适用范围,领会以三元组表示稀理解稀疏矩阵的两种存储方式的特点和适用范围,领会以三元组表示稀疏矩阵时进行运算采用的处理方法。疏矩阵时进行运算采用的处理方法。掌握广义表的定义及其存储结构,学会将广
2、义表分解为表头,表尾的方掌握广义表的定义及其存储结构,学会将广义表分解为表头,表尾的方法。法。3 3教学重点:教学重点:掌握特殊矩阵的压缩存储。掌握特殊矩阵的压缩存储。掌握稀疏矩阵采用三元组存储时典型算法的实现。掌握稀疏矩阵采用三元组存储时典型算法的实现。广义表的定义、运算。广义表的定义、运算。4 4教学难点:教学难点:数组的十字链表存储结构。数组的十字链表存储结构。第5章 数组和广义表 西安科技大学精品课程图图5.1 Amn的二维数组的二维数组5.1 数组数组5.1.1 5.1.1 数组的逻辑结构数组的逻辑结构 是是线性表线性表的推广的推广 数组数组特点特点:元素本身可以是具有某种结构的数据
3、元素本身可以是具有某种结构的数据,但属于同一但属于同一数据类型。数据类型。比如:一维数组可以看作一个线性表,二维数组可以看作比如:一维数组可以看作一个线性表,二维数组可以看作“数数据元素是一维数组据元素是一维数组”的一维数组,依此类推。图的一维数组,依此类推。图5.1是一个是一个m行行n列列的二维数组。的二维数组。第5章 数组和广义表 西安科技大学精品课程图5.2 矩阵Amn看成n个列向量的线性表 第5章 数组和广义表 西安科技大学精品课程图5.3 矩阵Amn看成m个行向量的线性表 推广:推广:n维数组维数组每个数据元素受每个数据元素受n个关系的约束,任一单个个关系的约束,任一单个关系,仍是线
4、性关系。关系,仍是线性关系。第5章 数组和广义表 西安科技大学精品课程通过以上分析可总结出数组具有以下性质:通过以上分析可总结出数组具有以下性质:数组中数据元素数目固定。数组中数据元素数目固定。数组中数据元素具有数组中数据元素具有相同的数据类型相同的数据类型。数组中每一个数据元素由数组中每一个数据元素由唯一的一组下标来标识唯一的一组下标来标识。数组是数组是随机存取随机存取的存储结构。的存储结构。在数组上在数组上不能做插入、删除数据元素的操作不能做插入、删除数据元素的操作。通常在各种高级语言中数组一旦被定义,通常在各种高级语言中数组一旦被定义,每一维的大小及上下每一维的大小及上下界都不能改变界都
5、不能改变。两种操作:两种操作:取值操作:给定一组下标,读其对应的数据元素。取值操作:给定一组下标,读其对应的数据元素。赋值操作:给定一组下标,存储或修改其相对应的数据元素。赋值操作:给定一组下标,存储或修改其相对应的数据元素。第5章 数组和广义表 西安科技大学精品课程 二维数组形式化表示为:二维数组形式化表示为:数组的顺序存储结构有两种:数组的顺序存储结构有两种:2Array(D,R)D=aij|i=c1,c1+1,d1,j=c2,c2+1,d2,aijD0 R=Row,Col Row|c1 i d1,c2 j d2-1,aij,ai(j+1)D0 Col|c1 i d1-1,c2 j d2,
6、aij,a(i+1)j D0 第5章 数组和广义表 西安科技大学精品课程 5.1.2 5.1.2 数组的存储结构数组的存储结构 数组的顺序存储结构有两种:数组的顺序存储结构有两种:1.按行序存储。如:按行序存储。如:BASIC、COBOL和和PASCAL语言。语言。2.按列序存储。如:按列序存储。如:FORTRAN语言。语言。二维数组二维数组Amn以行为主的存储序列为:以行为主的存储序列为:a11,a12,,a1n,a21,a22,a2n,am1,am2,amn 而以列为主的存储序列为:而以列为主的存储序列为:a11,a21,,am1,a12,a22,am2,a1n,a2n,amn第5章 数组
7、和广义表 西安科技大学精品课程设有二维数组设有二维数组Amn,按元素的下标求其地址的计算:,按元素的下标求其地址的计算:以以“以行为主序以行为主序”的分配为例:设数组的基址为的分配为例:设数组的基址为LOC(a11),每个,每个数组元素占据数组元素占据l个地址单元,那么个地址单元,那么aij的物理地址计算为:的物理地址计算为:LOC(aij)=LOC(a11)+(i-1)*n+j-1)*l第5章 数组和广义表 西安科技大学精品课程 在在C语言中,数组中每一维的下界定义为语言中,数组中每一维的下界定义为0,则:,则:LOC(aij)=LOC(a00)+(i*n+j)*l 推广到一般二维数组:推广
8、到一般二维数组:Ac1.d1c2.d2,aij地址计算函数为:地址计算函数为:LOC(aij)=LOC(a c1 c2)+(i-c1)*(d2-c2+1)+(j-c2)*l 同理对于三维数组同理对于三维数组Amnp,即,即mnp数组,数组,aijk其物理地址为:其物理地址为:LOC(aijk)=LOC(a111)+(i-1)*n*p+(j-1)*p+k-1)*l 推广到一般的三维数组:推广到一般的三维数组:Ac1.d1c2.d2c3.d3,则,则aijk物理地址物理地址为:为:LOC(i,j,k)=LOC(a c1 c2 c3)+(i-c1)*(d2-c2+1)*(d3-c3+1)+(j-c2
9、)*(d3-c3+1)+(k-c3)*l第5章 数组和广义表 西安科技大学精品课程 容易看出,数组元素的存储位置是其下标的线性函数,一旦数容易看出,数组元素的存储位置是其下标的线性函数,一旦数组下标的组下标的界偶界偶确定之后,数组中的元素可随机存取。我们称具有确定之后,数组中的元素可随机存取。我们称具有这一特点的存储结构为这一特点的存储结构为随机存储结构随机存储结构。lcjcdcjcccLoclcjcjcdcjcdcdcjcdcdcccLocjjjLocnnnikkkniiinnnnnnnnnnnnn)()1()(,)()(1()(1()1()(1()1(,111211122331122212
10、1 对于维数组对于维数组A(c1.d1,c2.d2,,cn.dn),元素,元素aj1j2jn的存储地址的的存储地址的计算公式计算公式:第5章 数组和广义表 西安科技大学精品课程例例5.1 若矩阵若矩阵Amn 中存在某个元素中存在某个元素aij满足:满足:aij是第是第i行中最小值且行中最小值且是第是第j列中的最大值,则称该元素为矩阵列中的最大值,则称该元素为矩阵A的一个鞍点。试编写一个的一个鞍点。试编写一个算法,找出算法,找出A中的所有鞍点。中的所有鞍点。基本思想:在矩阵基本思想:在矩阵A中求出每一行的最小值元素,然后判断该中求出每一行的最小值元素,然后判断该元素是不是它所在列中的最大值,是则
11、打印输出,接着处理下一行元素是不是它所在列中的最大值,是则打印输出,接着处理下一行。矩阵。矩阵A用一个二维数组表示。用一个二维数组表示。第5章 数组和广义表 西安科技大学精品课程void saddle(int A,int m,int n)int i,j,min;for(i=0;im;i+)/*按行处理按行处理*/min=Ai0;for(j=1;jn;j+)if(Aijmin)min=Aij;/*找第找第i行最小值行最小值*/for(j=0;jn;j+)/*检测该行中的每一个最小值是不是鞍点检测该行中的每一个最小值是不是鞍点*/if(Aij=min)k=j;p=0;while(pm&Apj=m)
12、printf(%d,%d,%dn,i,k,min);/*if*/*for i*/算法的时间性能为算法的时间性能为O(m*(n+m*n)。第5章 数组和广义表 西安科技大学精品课程5.2 特殊矩阵的压缩存储特殊矩阵的压缩存储特殊矩阵:特殊矩阵:1.非零元素非常少;非零元素非常少;2.矩阵元素的分布有一定规律矩阵元素的分布有一定规律所谓所谓压缩存储压缩存储是指:是指:为多个值相同的元素只分配一个存储空间,为多个值相同的元素只分配一个存储空间,值为零的元素不分配空间值为零的元素不分配空间。第5章 数组和广义表 西安科技大学精品课程5.2.1 5.2.1 对称矩阵对称矩阵 特点:在一个特点:在一个n阶
13、方阵中,有阶方阵中,有aij=aji,其中,其中1i,jn,如图,如图5.3所示是一个所示是一个5阶对称矩阵。阶对称矩阵。第5章 数组和广义表 西安科技大学精品课程 对于元素对于元素aij,特点是:,特点是:ij且且1in,下标下标k与与i、j的关系为:的关系为:k=i*(i-1)/2+j-1 (kn*(n+1)/2)若若ij,则,则aij是上三角中的元素,因为是上三角中的元素,因为aij=aji,这样,访问上三,这样,访问上三角中的元素角中的元素aij时则去访问和它对应的下三角中的时则去访问和它对应的下三角中的aji即可,因此将上即可,因此将上式中的行列下标交换就是上三角中的元素在式中的行列
14、下标交换就是上三角中的元素在SA中的对应关系:中的对应关系:k=j*(j-1)/2+i-1 (kj)在一维数组在一维数组A中的位置为:中的位置为:Loci,j=Loc1,1+前前i-1行非零元个数行非零元个数+第第i行中行中aij前非零元个数前非零元个数 即:即:Loci,j=Loc1,1+i(i-1)/2+j-1设存入向量:设存入向量:SAn*(n+1)/2+1中,中,SA k与与aij的对应关系为:的对应关系为:k=i*(i-1)/2+j-1 当当ijn*(n+1)/2 当当ij(2)上三角矩阵,也可以将其压缩存储到一个大小为)上三角矩阵,也可以将其压缩存储到一个大小为n(n+1)/2的一
15、的一维数组维数组C中。其中元素中。其中元素aij(ij第5章 数组和广义表 西安科技大学精品课程图图5.8 带状矩阵带状矩阵A 三对角带状矩阵有如下特点:三对角带状矩阵有如下特点:i=1,j=1,2;1in,j=i-1,i,i+1;i=n,j=n-1,n;时,时,aij非零,其它元素均为零。非零,其它元素均为零。当当5.2.3 带状矩阵带状矩阵 第5章 数组和广义表 西安科技大学精品课程 1.确定存储该矩阵所需的一维向量空间的大小确定存储该矩阵所需的一维向量空间的大小 假设每个非零元素所占空间的大小为假设每个非零元素所占空间的大小为1个单元。个单元。所需一维向量空间的大小为所需一维向量空间的大
16、小为2+2+3(n-2)=3n-2,如图,如图5.9所示。所示。图图5.9 带状矩阵的压缩形式带状矩阵的压缩形式 第5章 数组和广义表 西安科技大学精品课程 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
17、)-1+j-i+1 =Loc1,1+2(i-1)+j-1 第5章 数组和广义表 西安科技大学精品课程5.3 稀疏矩阵的压缩存储稀疏矩阵的压缩存储 设设mn矩阵中有矩阵中有t个非零元素且个非零元素且tmn,这样的矩阵称为稀,这样的矩阵称为稀疏矩阵。疏矩阵。第5章 数组和广义表 西安科技大学精品课程5.3.1 稀疏矩阵稀疏矩阵 非零元个数远远小于零元个数。非零元个数远远小于零元个数。图图5.10 稀疏矩阵稀疏矩阵 第5章 数组和广义表 西安科技大学精品课程第5章 数组和广义表 西安科技大学精品课程三元组表的类型说明如下:三元组表的类型说明如下:define SMAX 1024 typedef st
18、ruct int i,j;datatype v;SPNode;typedef struct int mu,nu,tu;SPNode dataSMAX;SPMatrix;第5章 数组和广义表 西安科技大学精品课程1)用三元组表实现稀疏矩阵的转置运算用三元组表实现稀疏矩阵的转置运算如图所示的如图所示的67矩阵矩阵M,它的转置矩阵就是,它的转置矩阵就是76的矩阵的矩阵N,并且并且N(row,col)=M(col,row),),其中,其中,1row7,1col6。第5章 数组和广义表 西安科技大学精品课程采用矩阵的正常存储方式时,采用矩阵的正常存储方式时,实现矩阵转置的经典算法如下:实现矩阵转置的经典
19、算法如下:void TransMatrix(datatype sourcenm,datatype destmn)int i,j;for(i=0;im;i+)for(j=0;jmu=A.nu;B-nu=A.mu;B-tu=A.tu;if(B-tu0)j=1;for(k=1;k=A.nu;k+)for(i=1;idataj.row=A.datai.col B-dataj.col=A.datai.row;B-dataj.e=A.datai.e;j+;【算法算法5.1 基于稀疏矩阵的三元组表示矩阵的转置算法基于稀疏矩阵的三元组表示矩阵的转置算法】第5章 数组和广义表 西安科技大学精品课程 时间复杂度为
20、时间复杂度为O(A.nA.len),最坏情况当最坏情况当A.len=A.mA.n时,时间复杂度为时,时间复杂度为O(A.mA.n2)。采用正常方式实现矩阵转)。采用正常方式实现矩阵转置的算法时间复杂度为置的算法时间复杂度为O(A.mA.n)。)。方法二方法二:依次按三元组表依次按三元组表A的次序进行转置,转置后直接放到三元组的次序进行转置,转置后直接放到三元组表表B的正确位置上的正确位置上。这种转置算法称为快速转置算法。这种转置算法称为快速转置算法。为了能将待转置三元组表为了能将待转置三元组表A中元素一次定位到三元组表中元素一次定位到三元组表B的正的正确位置上,需要预先计算以下数据:确位置上,
21、需要预先计算以下数据:(1)待转置矩阵每一列中非零元素的个数。待转置矩阵每一列中非零元素的个数。(2)待转置矩阵每一列中第一个非零元素在三元组表待转置矩阵每一列中第一个非零元素在三元组表B中的正中的正确位置确位置。第5章 数组和广义表 西安科技大学精品课程 为此,为此,需要设两个数组需要设两个数组 numcol用来存放用来存放A中第中第col列非零元素个数列非零元素个数 positioncol用来存放用来存放A中第中第col列中第一个非零元素在三列中第一个非零元素在三元组表元组表B中的正确位置。中的正确位置。其中:其中:(1)numcol的计算方法:的计算方法:将三元组表将三元组表A扫描一遍,
22、对于其中列号为扫描一遍,对于其中列号为k的元素,给相应的元素,给相应的的numk加加1。(2)positioncol的计算方法:的计算方法:position1=1,positioncol=position col-1+numcol-1,其中,其中2colA.nu。第5章 数组和广义表 西安科技大学精品课程第5章 数组和广义表 西安科技大学精品课程 具体算法如下:具体算法如下:FastTransposeTSMatrix(TSMatrix *A)/*基于矩阵的三元组表示,基于矩阵的三元组表示,采用快速转置法,采用快速转置法,将矩阵将矩阵A转置为转置为B所指的矩阵所指的矩阵*/int col,t,p
展开阅读全文