ImageVerifierCode 换一换
格式:PPT , 页数:581 ,大小:2.92MB ,
资源ID:1181145      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/1181145.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构教案(苏2).ppt)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构教案(苏2).ppt

1、第5章 数组和广义表,数组是一种人们非常熟悉的数据结构,几乎所有的程序设计语言都支持这种数据结构或将这种数据结构设定为语言的固有类型。数组这种数据结构可以看成是线性表的推广。科学计算中涉及到大量的矩阵问题,在程序设计语言中一般都采用数组来存储,被描述成一个二维数组。但当矩阵规模很大且具有特殊结构(对角矩阵、三角矩阵、对称矩阵、稀疏矩阵等),为减少程序的时间和空间需求,采用自定义的描述方式。广义表是另一种推广形式的线性表,是一种灵活的数据结构,在许多方面有广泛的应用。,5.1 数组的定义,数组是一组偶对(下标值,数据元素值)的集合。在数组中,对于一组有意义的下标,都存在一个与其对应的值。一维数组

2、对应着一个下标值,二维数组对应着两个下标值,如此类推。数组是由n(n1)个具有相同数据类型的数据元素a1,a2,an组成的有序序列,且该序列必须存储在一块地址连续的存储单元中。数组中的数据元素具有相同数据类型。数组是一种随机存取结构,给定一组下标,就可以访问与其对应的数据元素。数组中的数据元素个数是固定的。,5.1.1 数组的抽象数据类型定义,1.抽象数据类型定义 ADT Array数据对象:ji=0,1,bi-1,1,2,n;D=aj1j2jn|n0称为数组的维数,bi是数组第i维的长度,ji是数组元素第i维的下标,aj1j2jnElemSet 数据关系:R=R1,R2,RnRi=|0jkb

3、k-1,1kn且ki,0jibi-2,aj1j2 ji+1jnD 基本操作:ADT Array,由上述定义知,n维数组中有b1b2 bn个数据元素,每个数据元素都受到n维关系的约束。2.直观的n维数组 以二维数组为例讨论。将二维数组看成是一个定长的线性表,其每个元素又是一个定长的线性表。设二维数组A=(aij)mn,则 A=(1,2,p)(p=m或n)其中每个数据元素j是一个列向量(线性表):j=(a1j,a2j,amj)1jn或是一个行向量:i=(ai1,ai2,ain)1im如图5-1所示。,5.2 数组的顺序表示和实现,数组一般不做插入和删除操作,也就是说,数组一旦建立,结构中的元素个数

4、和元素间的关系就不再发生变化。因此,一般都是采用顺序存储的方法来表示数组。问题:计算机的内存结构是一维(线性)地址结构,对于多维数组,将其存放(映射)到内存一维结构时,有个次序约定问题。即必须按某种次序将数组元素排成一列序列,然后将这个线性序列存放到内存中。二维数组是最简单的多维数组,以此为例说明多维数组存放(映射)到内存一维结构时的次序约定问题。,通常有两种顺序存储方式 行优先顺序(Row Major Order):将数组元素按行排列,第i+1个行向量紧接在第i个行向量后面。对二维数组,按行优先顺序存储的线性序列为:a11,a12,a1n,a21,a22,a2n,am1,am2,amn PA

5、SCAL、C是按行优先顺序存储的,如图5-2(b)示。列优先顺序(Column Major Order):将数组元素按列向量排列,第j+1个列向量紧接在第j个列向量之后,对二维数组,按列优先顺序存储的线性序列为:a11,a21,am1,a12,a22,am2,an1,an2,anm FORTRAN是按列优先顺序存储的,如图5-2(c)。,设有二维数组A=(aij)mn,若每个元素占用的存储单元数为d(个),LOCa11表示元素a11的首地址,即数组的首地址。1.以“行优先顺序”存储 第1行中的每个元素对应的(首)地址是:LOCa1j=LOCa11+(j-1)d j=1,2,n(2)第2行中的每

6、个元素对应的(首)地址是:LOCa2j=LOCa11+nd+(j-1)d j=1,2,n 第m行中的每个元素对应的(首)地址是:LOCamj=LOCa11+(m-1)nd+(j-1)d j=1,2,n,由此可知,二维数组中任一元素aij的(首)地址是:LOCaij=LOCa11+(i-1)n+(j-1)d(5-1)i=1,2,m j=1,2,n 根据(5-1)式,对于三维数组A=(aijk)mnp,若每个元素占用的存储单元数为d(个),LOCa111表示元素a111的首地址,即数组的首地址。以“行优先顺序”存储在内存中。三维数组中任一元素aijk的(首)地址是:LOC(aijk)=LOCa11

7、1+(i-1)np+(j-1)p+(k-1)d(5-2),例如,二维数组Amn按“行优先顺序”存储在内存中,假设每个元素占用d个存储单元。元素aij的存储地址应是数组的基地址加上排在aij前面的元素所占用的单元数。因为aij位于第i行、第j列,前面i-1行一共有(i-1)n个元素,第i行上aij前面又有j-1个元素,故它前面一共有(i-1)n+j-1个元素,因此,aij的地址计算函数为:LOC(aij)=LOC(a11)+(i-1)*n+j-1*d 同样,三维数组Amnp按“行优先顺序”存储,其地址 计算函数为:LOC(aijk)=LOC(a111)+(i-1)*n*p+(j-1)*p+(k-

8、1)*d,上述讨论均是假设数组各维的下界是不是1,更一般的二维数组是Ac1.d1,c2.d2,这里c1,c2不一定是1。aij前一共有i-c1行,二维数组一共有d2-c2+1列,故这i-c1行共有(i-c1)*(d2-c2+1)个元素,第i行上aij前一共有j-c2个元素,因此,aij的地址计算函数为:LOC(aij)=LOC(ac1c2)+(i-c1)*(d2-c2+1)+j-c2)*d 例如,在C语言中,数组各维下标的下界是0,因此在C语言中,二维数组的地址计算公式为:LOC(aij)=LOC(a00)+(i*(d2+1)+j)*d,2.以“列优先顺序”存储 第1列中的每个元素对应的(首)

9、地址是:LOCaj1=LOCa11+(j-1)l j=1,2,m(2)第2列中的每个元素对应的(首)地址是:LOCaj2=LOCa11+ml+(j-1)l j=1,2,m 第n列中的每个元素对应的(首)地址是:LOCajn=LOCa11+(n-1)ml+(j-1)l j=1,2,m 由此可知,二维数组中任一元素aij的(首)地址是:LOCaij=LOCa11+(i-1)m+(j-1)l(5-1)i=1,2,n j=1,2,m,5.3 矩阵的压缩存储,在科学与工程计算问题中,矩阵是一种常用的数学对象,在高级语言编程时,通常将一个矩阵描述为一个二维数组。这样,可以对其元素进行随机存取,各种矩阵运算

10、也非常简单。对于高阶矩阵,若其中非零元素呈某种规律分布或者矩阵中有大量的零元素,若仍然用常规方法存储,可能存储重复的非零元素或零元素,将造成存储空间的大量浪费。对这类矩阵进行压缩存储:多个相同的非零元素只分配一个存储空间;零元素不分配空间。,5.3.1 特殊矩阵,特殊矩阵:是指非零元素或零元素的分布有一定规律的矩阵。1.对称矩阵 若一个n阶方阵A=(aij)nn中的元素满足性质:aij=aji 1i,jn且ij则称A为对称矩阵,如图5-3所示。,对称矩阵中的元素关于主对角线对称,因此,让每一对对称元素aij和aji(ij)分配一个存储空间,则n2个元素压缩存储到n(n+1)/2个存储空间,能节

11、约近一半的存储空间。不失一般性,假设按“行优先顺序”存储下三角形(包括对角线)中的元素。设用一维数组(向量)sa0n(n+1)/2存储n阶对称矩阵,如图5-4所示。为了便于访问,必须找出矩阵A中的元素的下标值(i,j)和向量sak的下标值k之间的对应关系。,若ij:ai j在下三角形中,直接保存在sa中。ai j之前的i-1行共有元素个数:1+2+(i-1)=i(i-1)/2而在第i行上,ai j之前恰有j-1个元素,因此,元素ai j保存在向量sa中时的下标值k之间的对应关系是:k=i(i-1)/2+j-1 ij 若ij:则aij是在上三角矩阵中。因为aij=aji,在向量sa中保存的是aj

12、i。依上述分析可得:k=j(j-1)/2+i-1 ij 对称矩阵元素ai j保存在向量sa中时的下标值k与(i,j)之间的对应关系是:,根据上述的下标对应关系,对于矩阵中的任意元素aij,均可在一维数组sa中唯一确定其位置k;反之,对所有k=0,1,2,n(n+1)/2-1,都能确定sak中的元素在矩阵中的位置(i,j)。称sa0n(n+1)/2为n阶对称矩阵A的压缩存储。2.三角矩阵 以主对角线划分,三角矩阵有上三角和下三角两种。上三角矩阵的下三角(不包括主对角线)中的元素均为常数c(一般为0)。下三角矩阵正好相反,它的主对角线上方均为常数,如图5-5所示。,三角矩阵中的重复元素c可共享一个

13、存储空间,其余的元素正好有n(n+1)/2个,因此,三角矩阵可压缩存储到向量sa0n(n+1)/2中,其中c存放在向量的最后1个分量中。下三角矩阵元素ai j保存在向量sa中时的下标值k与(i,j)之间的对应关系是:,上三角矩阵的第p行有n-p+1个元素,元素ai j前有i-1行,p从第一行1到i-1行累加每行元素个数,保存在向量sa中时的下标值k与(i,j)之间的对应关系是:,3.对角矩阵 矩阵中,除了主对角线和主对角线上或下方若干条对角线上的元素之外,其余元素皆为零。即所有的非零元素集中在以主对角线为了中心的带状区域中,如图5-6所示。,如上图三对角矩阵,非零元素仅出现在主对角(ai i,

14、1in)上、主对角线上的那条对角线(ai i+1,1in-1)、主对角线下的那条对角线上(ai+1 i,1in-1)。显然,当|i-j|1时,元素aij=0。由此可知,一个k对角矩阵(k为奇数)A是满足下述条件:当|i-j|(k-1)/2时,ai j=0,对角矩阵可按行优先顺序或对角线顺序,将其压缩存储到一个向量中,并且也能找到每个非零元素和向量下标的对应关系。仍然以三对角矩阵为例讨论。当i=1,j=1、2,或i=n,j=n-1、n或1in-1,j=i-1、i、i+1的元素aij外,其余元素都是0。对这种矩阵,当以按“行优先顺序”存储时,第1行和第n行是2个非零元素,其余每行的非零元素都要是3

15、个,则需存储的元素个数为3n-2。,如图5-7所示三对角矩阵的压缩存储形式。数组sa中的元素sak与三对角矩阵中的元素aij存在一一对应关系,在aij之前有i-1行,共有3(i-1)-1个非零元素,在第i行,有j-i+1个非零元素,这样,非零元素aij的地址为:LOCai j=LOCa11+3(i-1)-1+(j-i+1)d=LOCa11+(2i+j-3)d上例中,a34对应着sa7,k=2i+j-3=23+4-3=7称sa03n-2是n阶三对角矩阵A的压缩存储。上述各种特殊矩阵,其非零元素的分布都是有规律的,因此总能找到一种方法将它们压缩存储到一个向量中,并且一般都能找到矩阵中的元素与该向量

16、的对应关系,通过这个关系,仍能对矩阵的元素进行随机存取。,5.3.2 稀疏矩阵,稀疏矩阵(Sparse Matrix):对于稀疏矩阵,目前还没有一个确切的定义。设矩阵A是一个nm的矩阵中有s个非零元素,设=s/(nm),称为稀疏因子,如果某一矩阵的稀疏因子满足0.05时称为稀疏矩阵,如图5-8所示。,稀疏矩阵的压缩存储,对于稀疏矩阵,采用压缩存储方法时,只存储非0元素。必须存储非0元素的行下标值、列下标值、元素值。因此,一个三元组(i,j,aij)唯一确定稀疏矩阵的一个非零元素。如图5-8的稀疏矩阵A的三元组线性表为:(1,2,12),(1,3,9),(3,1,-3),(3,8,4),(4,3,24),(5,2,18),(6,7,-7),(7,4,-6),1.三元组表,若以行序为主序,稀疏矩阵中所有非0元素的三元组,就可以得构成该稀疏矩阵的一个三元组顺序表。相应的数据结构定义如下:三元组结点定义#define MAX_SIZE 101 typedef int elemtype;typedef struct int i;/*行下标*/int j;/*列下标*/elemtype v;/*元

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1