数据结构第5章数组广义表课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据结构第5章数组广义表课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 数组 广义 课件
- 资源描述:
-
1、数组描述数组描述二维数组可用形式化语言描述,即:A(2)=(D,R)其中:D=aij|aijdatatype,0im-1,0jn-1;R=Row,Col 行关系:Row=|aij,aij+1D,0im-1,0jn-2 列关系:Col=|aij,ai+1jD,0im-2,0jn-1 关系集Row和Col表明:除数组A(2)周边元素外的其它任一个元素aij,有两个直接前驱ai-1j,aij-1,和两个直接后继ai+1j,aij+1(周边元素的前驱或后继可不足两个)。n维数组也可按上述方法类似定义。二维数组还可以用如下形式描述:A0 Ai Am-1=(A0AiAm-1)-线性表形式线性表形式a00
2、a01 a0j a0n-1.ai0 ai1 aij.ain-1.am-10 am-11 am-1j am-1n-1A(2)=Amn=2.数组的基本运算数组的基本运算 多维数组是线性表的推广,而线性表是多维数组的特例。在算法语言中,数组一旦生成,其元素的存储空间就固定下来,故数组的运算一般不包括插入和删除这样的操作。对数组运算有:(1)构造一个n维数组:Setarray(A,n,d1d2,.dn),即生成:Ad1d2.dn(C语言中,1n8)。(2)撤消一个数组:Dearray(A),释放数组A的存储空间。(3)取值:Aget(A,i1,.,in,x),将Ai1i2,.,in的值传给变量 x。(
3、4)赋值:Assign(A,i1,.,in,x),将变量 x的值传给Ai1i2.in。5.2 数组的存储映像数组的存储映像 由于计算机的存储空间是一维的(或线性的),所以存储数组时,要将多维数组中的元素按某种次序映象到一维存储空间,即解决“降维”问题。在PASCAL和C等语言中,是按低维下标优先变化(或按行优先)的方式,存储数组中的元素。如在C语言中,二维数组的映像如图5.1所示。但在FORTRAN语言中,数组元素是按高维下标优先变化或按列优先方式,存储数组中的元素。数组的存储映像数组的存储映像 a00a0,n-1ai0ai,n-1am-1,n-1映像映像 (存储器)存储器)a00 a01 a
4、0j a0n-1.ai0 ai1 aij.ain-1.am-10 am-11 am-1j am-1n-1 Amn=图图5.1思考:思考:1.三维以上数组如何映像三维以上数组如何映像?2.“按列优先按列优先”如何映像如何映像?5.2.1数组元素的地址计算数组元素的地址计算v以C语言为例。设数组元素的起始地址为b,每个元素占用L个单元(元素所占单元量由元素的类型而定),元素a的地址用Loc(a)表示。1.一维数组:一维数组:即即:Loc(a0)=b;Loc(a1)=b+L;Loc(ai)=b+iL;规律:任一元素规律:任一元素ai的地址的地址:a0a1 ai-1aian-1An=(a0,a1,ai
5、,an-1)起始地址起始地址b+(ai前的元素个数前的元素个数i)L 起址起址 b:b+L:b+iL:L图图5.3数组元素的地址计算数组元素的地址计算2.二维数组:二维数组:a00a0,n-1ai0aijam-1,n-1映像映像 (存储器)存储器)起址起址 b:b+L:b+inL:b+in+jL:由图由图5.4知:知:Loc(a00)=b Loc(ai0)=b+(ai0前元素个数前元素个数)L=b+(in)L Loc(aij)=b+(aij前元素个数前元素个数)L=b+in+jL例例5-1 设二维数组设二维数组A78,起始地址,起始地址b=1000,每个元素所占单元量,每个元素所占单元量L=3
6、,则则Loc(a5,6)=1000+(58+6)3=1138。inj图图5.4a00 a01 a0j a0n-1.ai0 ai1 aij.ain-1.am-10 am-11 am-1j am-1n-1 Amn=数组元素的地址计算数组元素的地址计算3三维数组三维数组:由图5.5可知:Loc(a000)=b 图图5.5 Loc(ai00)=b+(inp)L Loc(aij0)=b+(inp+jp)L Loc(aijk)=b+(inp+jp+k)L可以看出,inp,inp+jp,inp+jp+k分别为ai00,aij0,aijk前的元素个数。a000ai00aij0aijk数组元素的地址计算数组元素
7、的地址计算4n 维数组维数组 从以上的地址公式推导中得出这样一条规律:任意维数组中任一元素的地址任意维数组中任一元素的地址=起址起址b+该元素前的个数该元素前的个数元素单元量元素单元量L。故n维数组Au1u2.un,其中任一元素ai1.in的地址为:Loc(ai1i2in)=b+(i1u2u3 un+i2u3u4 un+in-1un+in)L =b+()L元素按“列优先”方式存储时,地址计算方法类似,不再赘述。有了数组元素的地址计算公式,给出相应参数后,能够很快求出任一元素的地址,然后按地址存取相应元素,故对数组的存取是随机存取(或按公式存取)。5.2.2数组空间的动态生成(略)数组空间的动态
8、生成(略)nnjkknjjiui1115.3矩阵的压缩存储矩阵的压缩存储 信息的压缩存储是一项专业技术,在当今的多媒体应用中显得尤为重要。但本节只是讨论矩阵(或二维数组)中元素的压缩存储。在矩阵中,往往会出现许多值相同的元素或元素,为节省存储空间,可以采用某些技术对这类矩阵进行压缩存储。压缩存储的原则是:对多个值相同的元素只存储其中之一,对元素甚至不分配存储空间。5.3.1特殊矩阵的压缩存储特殊矩阵的压缩存储 特殊矩阵,指的是值相同的元素或元素在矩阵中的分布遵循一定规律的矩阵。1.对称矩阵对称矩阵:满足aij=aji,(1i,jn)a11 a22 aii ann Ann=aijaji特殊矩阵的
9、压缩特殊矩阵的压缩 显然,aij与aji对称相等,二者只需分配一个存储单元,即只存储矩阵中包括主对角线的下三角(或上三角)元素。于是Ann所需的存储单元数为n(n+1)/2,而不压缩存储需要n2个存储单元。当n很大时,几乎能压缩原存储空间的一半。具体做法是:设置一个一维数组Sn(n+1)/2+1作为An.n的存储空间,且按行的次序存放Ann中包括主对角线的下三角元素,如图5.7所示。a11a21a22aijann Sn(n+1)/2+1:1 2 3 .k.n(n+1)/2图图5.7a11 a22 aii ann Ann=aij其中aij存入Sk单元,下标(i,j)与k的关系为:i(i-1)/2
10、+j 当ij 时;Si(i-1)/2+j 当ij 时;k=即:即:aij=j(j-1)/2+i 当ij时。Sj(j-1)/2+i 当ij时。特殊矩阵的压缩特殊矩阵的压缩三角矩阵:三角矩阵:(下三角矩阵)(上三角矩阵)显然,对于下三角矩阵,类似于对称矩阵的压缩存储,即只存储包括主对角线的下三角元素。而当ij)时,K=0.图图5.8 特殊矩阵的压缩特殊矩阵的压缩3对角线矩阵(对角线矩阵(三对角线):按行顺序压缩于S中,如图5.9所示。Ca11a12aijann S3n-1:0 1 2 .k .3n-2a11 a12 a21 a22 a23 .aii-1 aii aii+1 .ann-1 ann A
11、nn=CC图图5.9 3(i-1)当i=j+1时;3i-2 当i=j时;归纳为:k=2i+j-2 当i=j+1,i=j,i+1=j时。3i-1 当i+1=j时;如将i=1,j=2代入,k=2 0 其他。k=5.3.2稀疏矩阵的压缩存储稀疏矩阵的压缩存储 特殊矩阵中同值元素的分布有一定的规律可循,而有的矩阵,元素很多(如同一个画面上有几个亮点,其余全是空白),但分布无规律,称这类矩阵为稀疏矩阵。例例5-2 设一个67的矩阵如下:则A67可以视为一个稀疏矩阵。对于矩阵Amn,设非0元素个数为t,若=t/(mn)0.2,则可以将其视为稀疏矩阵。显然,为节省存储空间,须对这类矩阵压缩存储空间,原则是只
12、存储非0元素。一般有“三元组表三元组表”和“十字链表十字链表”的压缩存储方法。0 1 0 2 0 0 00 0 0 0 0 0 0 3 0 0 0 0 4 00 0 5 0 0 0 0 0 6 0 0 0 0 0 7 0 0 8 0 0 0 A67=1三元组表三元组表 三元组:(i,j,v),其中i,j分别为非0元素的行、列号,v存放非0元的数值。以行优先的顺序将稀疏矩阵中非0元以三元组形式存入一数组,即所谓的三元组表。三元组表的存储结构的描述:#define maxsize 64 /最大非0元个数/typedef Struct /三元组类型/int i,j;datatype v;trityp
13、e;/三元组说明符/typedef Struct tritype datamaxsize+1;/三元组表/int mu,nu,tu;/原矩阵的行、列、非0元个数/Tsmtype,*Tsmlink;/三元组表说明符/若说明:Tsmlink A;A=(Tsmlink)malloc(sizeof(Tsmtype);则指针变量A指向一个如图5.10所示的三元组表。对例5-3中A67,设每个元素占16个字节,若不压缩存储,需6716=672(字节),而压缩成三元组表存储时,i,j为整型,故共需:216+816=160(字节)。ijv121142313364435526617648A-data1 A-da
14、tatu 图图5.10三元组表的转置三元组表的转置 然而,稀疏矩阵的压缩存储会给矩阵运算带来一些不便,算法要复杂些。这里的运算指求矩阵的转置,两矩阵相加和相乘等。我们只讨论矩阵的转置的算法。未压缩前,求矩阵A的转置矩阵B,算法很简单:for(col=1;col=nu;col+)for(row=1;rowdata3.j=1,所以将A-data3的转置:(1,2,6)=B-data1,又A-data6.j=1,所以A-data6的转置:(1,4,3)=B-data2,完成第一列的转换,依此类推。算法描述算法描述:void Transm(Tsmtype A,Tsmtype B)int p,q,col
展开阅读全文