字符串及线性结构的扩展课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《字符串及线性结构的扩展课件.ppt》由用户(ziliao2023)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 字符串 线性 结构 扩展 课件
- 资源描述:
-
1、2023-4-26数据结构讲义1第4章 字符串及线性结构的扩展 教学内容:4.1 字符串 4.2 数组 4.3 广义表教学目的:(1)了解串、数组、广义表几中特殊的线形表的定义;(2)理解和领会串的存储方式和掌握常用的串运算;(3)理解多维数组的结构特点和在内存中的两种顺序存储方式;(4)领会稀疏矩阵的压缩方式和简单运算。2023-4-26数据结构讲义2 教学重点:(1)串和数组的逻辑结构、基本运算 (2)串的两种存储方式 (3)串的模式匹配算法 (4)多维数组的两种顺序存储方式 (5)对称矩阵、三角矩阵的压缩存储方式 (6)稀疏矩阵的三元组表表示方法教学难点:(1)串的模式匹配 (2)串的综
2、合应用 (3)稀疏矩阵压缩存储表示下的运算实现学时安排:4学时2023-4-26数据结构讲义34.1 字符串4.1.1 字符串的基本概念4.1.2 顺序串4.1.3 模式匹配2023-4-26数据结构讲义44.1.1 字符串的基本概念 字符串(简称为串)是数据元素为字符的线性表,它的是由零个或多个任意字符组成的字符序列。一般记作:s=”s1 s2 sn”。其中s 是串名;在本书中,用双引号作为串的定界符,引号引起来的字符序列为串值,引号本身不属于串的内容;si(1=iMAXSIZE1)return 0;/*MAXSIZE为 s长度,不够长时*/i=0;while(s1i!=0)si=s1i;i
3、+;j=0;while(s2j!=0)si=s2j;i+;j+;si=0;/*置串结束标志*/return 1;/*连接成功*/2023-4-26数据结构讲义12(3)求子串【算法 4-3】求子串算法int StrSub(char*t,char*s,int i,int len)/*用t返回串s中第i个字符开始的长度为len 的子串1i串长*/int slen;slen=StrLength(s);if(islen|lenslen-i+1)printf(参数不对n);return 0;for(j=0;js2返回大于0的数否则返回小于0的数*/int i=0;while(s1i=s2i&s1i!=0
4、)i+;return(s1i-s2i);许多程序设计语言为用户提供了大量的字符串函数,如在C语言中的“string.h”库中提供了若干处理字符串的函数,通过这些函数用户很方便的构架字符串的操作,故不再这里赘述。2023-4-26数据结构讲义144.1.3 模式匹配 串的模式匹配即子串定位是一种重要的串运算。设s和t是给定的两个串,在主串s中查找子串t的过程称为模式匹配,如果在s中找到等于t的子串,则称匹配成功,函数返回t在s中的首次出现的存储位置(或序号),否则匹配失败,返回0。t也称为模式。为了运算方便,设字符串采用定长存储,且用第3种方式表示串长,即串的长度存放在0号单元,串值从1号单元存
5、放,这样字符序号与存储位置一致。2023-4-26数据结构讲义15 算法思想如下:首先将s1与t1进行比较,若不同,就将s2与t1进行比较,.,直到s的某一个字符si和t1相同,再将它们之后的字符进行比较,若也相同,则如此继续往下比较,当s的某一个字符si与t的字符tj不同时,则s返回到本趟开始字符的下一个字符,即si-j+2,t返回到t1,继续开始下一趟的比较,重复上述过程。若t中的字符全部比完,则说明本趟匹配成功,本趟的起始位置是i-j+1或i-t0,否则,匹配失败。设主串s=acabaabaabcacaabc,模式t=abaabcac,匹配过程如图所示。2023-4-26数据结构讲义16
6、【算法 4-5】简单模式匹配算法int StrIndex_BF(char s,char t)/*从串s的第一个字符开始找第一个与串t相等的子串*/int i=1,j=1;while(i=s0&jt0)return(i-t0);/*匹配成功,返回存储位置*/else return 0;2023-4-26数据结构讲义17 下面分析它的时间复杂度,设串s长度为n,串t长度为m。匹配成功的情况下,考虑两种极端情况:在最好情况下,每趟不成功的匹配都发生在第一对字符比较时:例如:s=”aaaaaaaaaabc”,t=”bc”设匹配成功发生在si处,则字符比较次数在前面i-1趟匹配中共比较了i-1次,第i趟
7、成功的匹配共比较了m次,所以总共比较了i-1+m次,所有匹配成功的可能共有n-m+1种,设从si开始与t串匹配成功的概率为pi,等概率情况下pi=1/(n-m+1),因此最好情况下平均比较的次数是:即最好情况下的时间复杂度是O(n+m)。2023-4-26数据结构讲义18 在最坏情况下,每趟不成功的匹配都发生在t的最后一个字符:例如:s=”aaaaaaaaaaab”,t=”aaab”设匹配成功发生在si处,则在前面i-1趟匹配中共比较了(i-1)*m次,第i趟成功的匹配共比较了m次,所以总共比较了i*m次,因此最坏情况下平均比较的次数是:即最坏情况下的时间复杂度是O(n*m)。2023-4-2
8、6数据结构讲义19 上述算法中匹配是从s串的第一个字符开始的,有时算法要求从指定位置开始,这时算法的参数表中要加一个位置参数pos:StrIndex(shar*s,int pos,char*t),比较的初始位置定位在pos处。算法4-5是pos=1的情况。2023-4-26数据结构讲义20 4.2 数组 4.2.1 数组的逻辑结构及内存映象 4.2.2 特殊矩阵 4.2.3 稀疏矩阵2023-4-26数据结构讲义214.2.1 数组的逻辑结构及内存映像 数组是我们熟悉的一种数据结构。数组作为一种数据结构其特点是结构中的元素本身可以是具有某种结构的数据,但属于同一数据类型,比如:一维数组可以看作
9、一个线性表,二维数组可以看作“数据元素是一维数组”的一维数组,三维数组可以看作“数据元素是二维数组”的一维数组,依此类推,所以可以看作是线性表的推广。2023-4-26数据结构讲义221数组的逻辑结构 数组是一个具有固定格式和数量的数据有序集,每一个数据元素有唯一的一组下标来标识。在数组上不能做插入、删除数据元素的操作。通常在各种高级语言中数组一旦被定义,每一维的大小及上下界都不能改变。在数组中通常做下面两种操作:(1)取值操作:给定一组下标,读其对应的数据元素。(2)赋值操作:给定一组下标,存储或修改与其相对应的数据元素。我们着重研究二维和三维数组,因为它们的应用是广泛的,尤其是二维数组。2
10、023-4-26数据结构讲义23 2 数组的内存映象 通常,数组在内存被映象为向量,这是因为内存的地址空间是一维的,数组的行列固定后,通过一个映象函数,则可根据数组元素的下标得到它的存储地址。对于一维数组按下标顺序分配即可。对多维数组分配时,要把它的元素映象存储在一维存储器中,一般有两种存储方式:一是以行为主序(或先行后列)的顺序存放,如BASIC、PASCAL、COBOL、C等程序设计语言中用的是以行为主的顺序分配,即一行分配完了接着分配下一行。另一种是以列为主序(先列后行)的顺序存放,如FORTRAN语言中,用的是以列为主序的分配顺序,即一列一列地分配。2023-4-26数据结构讲义24
11、以行为主序的分配规律是:最右边的下标先变化,即最右下标从小到大,循环一遍后,右边第二个下标再变,从右向左,最后是左下标。以列为主序分配的规律恰好相反:最左边的下标先变化,即最左下标从小到大,循环一遍后,左边第二个下标再变,从左向右,最后是右下标。2023-4-26数据结构讲义25 设二维数组Amn,按元素的下标求其地址的计算:以“以行为主序”的分配为例:设数组的基址为LOC(a11),每个数组元素占据l个地址单元,那么aij 的物理地址可用一线性寻址函数计算:LOC(aij)=LOC(a11)+(i-1)*n+j-1)*l 在C语言中,数组中每一维的下界定义为0,则:LOC(aij)=LOC(
12、a00)+(i*n+j)*l 推广到一般的二维数组:Ac1.d1 c2.d2,则aij的物理地址计算函数为:LOC(aij)=LOC(a c1 c2)+(i-c1)*(d2-c2+1)+(j-c2)*l2023-4-26数据结构讲义26 同理对于三维数组Amnp,即mnp数组,对于数组元素aijk其物理地址为:LOC(aijk)=LOC(a111)+(i-1)*n*p+(j-1)*p+k-1)*l 推广到一般的三维数组:Ac1.d1 c2.d2 c3.d3,则aijk的物理地址为:LOC(i,j)=LOC(a c1 c2 c3)+(i-c1)*(d2-c2+1)*(d3-c3+1)+(j-c2
13、)*(d3-c3+1)+(k-c3)*l2023-4-26数据结构讲义27三维数组的逻辑结构和以行为主序的分配示意图如图所示。2023-4-26数据结构讲义28例4-1 若矩阵Amn 中存在某个元素aij满足:aij是第i行中最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点。试编写一个算法,找出A中的所有鞍点。实现的基本思想:在矩阵A中求出每一行的最小值元素,然后判断该元素它是否是它所在列中的最大值,是则打印出,接着处理下一行。矩阵A用一个二维数组表示。2023-4-26数据结构讲义29【算法4-8】求矩阵鞍点#define M/*矩阵的行*/#define N/*矩阵的列*/void
14、 saddle(int A N)int i,j,k,p,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)printf(%d,%d,%dn,i,k,min);对任意mn的矩阵,算法的时间性能为O(m(n+mn)。2023-4-26数据结构讲义304.2.2 特殊矩阵 对于一个矩阵结构显然用一个二维数组来表示是非常恰当的,但在有些情况下,比如常见的一些特殊矩阵
15、,如三角矩阵、对称矩阵、带状矩阵、稀疏矩阵等,从节约存储空间的角度考虑,这种存储是不太合适的。下面从这一角度来考虑这些特殊矩阵的存储方法。2023-4-26数据结构讲义311.对称矩阵对称矩阵的特点是:在一个n阶方阵中,有aij=aji,其中1i,jn2023-4-26数据结构讲义32 对称矩阵关于主对角线对称,因此只需存储上三角或下三角部分即可。比如,只存储下三角中的元素aij,其特点是中ji且1in,对于上三角中的元素aij,它和对应的aji相等,因此当访问的元素在上三角时,直接去访问和它对应的下三角元素即可,这样,原来需要n*n个存储单元,现在只需要n(n+1)/2个存储单元了,节约了n
16、(n-1)/2个存储单元,当n较大时,这是可观的一部分存储资源。2023-4-26数据结构讲义33 如何只存储下三角部分?对下三角部分,以行为主序顺序存储到一个向量中去,在下三角中共有n*(n+1)/2个元素,因此,不失一般性,设存储到向量SAn(n+1)/2中,存储顺序可用下图示意,这样,原矩阵下三角中的某一个元素aij则具体对应一个sak,下面的问题是要找到k与i、j之间的关系。2023-4-26数据结构讲义34 在上面的排列顺序中,aij是第i*(i-1)/2+j个元素,因此它在SA中的下标k与i、j的关系为:k=i*(i-1)/2+j-1 (kn*(n+1)/2)当访问的元素在上三角中
17、时(ij),因为aij=aji,因此访问和它对应的aji即可,因此将上式中的行列下标交换就是上三角中的元素aij在SA中的对应关系:k=j*(j-1)/2+i-1 (kn*(n+1)/2)综上所述,对于对称矩阵中的任意元素aij,若令I=max(i,j),J=min(i,j),则将上面两个式子综合起来得到:k=I*(I-1)/2+J-12023-4-26数据结构讲义35 2.三角矩阵 形如下图的矩阵称为三角矩阵,其中c为某个常数。其中(a)为下三角矩阵:主对角线以上均为同一个常数;(b)为上三角矩阵,主对角线以下均为同一个常数;下面讨论它们的压缩存储方法。2023-4-26数据结构讲义36(1
18、)下三角矩阵 与对称矩阵类似,不同之处在于存完下三角中的元素之后,紧接着存储对角线上方的常量,因为是同一个常数,所以存一个即可,这样一共存储了n*(n+1)+1个元素,设存入向量:SAn*(n+1)+1中,这种的存储方式可节约n*(n-1)-1个存储单元,sak 与aji 的对应关系为:2023-4-26数据结构讲义37(2)上三角矩阵 对于上三角矩阵,存储思想与下三角类似,以行为主序顺序存储上三角部分,最后存储对角线下方的常量。对于第1行,存储n个元素,第2行存储n-1个元素,第p行存储(n-p+1)个元素,aij的前面有i-1行,共存储:个元素,aij 是它所在的行中要存储的第(j-i+1
19、)个也就是上三角存储顺序中的第(i-1)*(2n-i+2)/2+(j-i+1)个,因此它在SA中的下标为:k=(i-1)*(2n-i+2)/2+j-i。综上,sak 与aji 的对应关系为:2023-4-26数据结构讲义38 3.带状矩阵 n阶矩阵A称为带状矩阵,如果存在最小正数m,满足当 i-j m 时,aij=0,这时称w=2m-1为矩阵A的带宽。下图是一个w=3(m=2)的带状矩阵。带状矩阵也称为对角矩阵。由下图可看出,在这种矩阵中,所有非零元素都集中在以主对角线为中心的带状区域中,即除了主对角线和它的上下方若干条对角线的元素外,所有其他元素都为零(或同一个常数c)。2023-4-26数
20、据结构讲义39 一种压缩方法是将A压缩到一个n行w列的二维数组B中,如下图所示,当某行非零元素的个数小于带宽w时,先存放非零元素后补零。那么aij 映射为b ij,映射关系为:2023-4-26数据结构讲义40 另一种压缩方法是将带状矩阵压缩到向量C中去,按以行为主序,顺序的存储其非零元素,如下图所示,按其压缩规律,找到相应的映象函数。如当w=3时,映象函数为:k=2*i+j-32023-4-26数据结构讲义414.2.3 稀疏矩阵 设m*n矩阵中有t个非零元素且tmu=Anu;Bnu=Amu;Btu=Atu;/*行、列、元素个数*/if(Btu0)q=1;for(col=1;colnu);c
展开阅读全文