数据结构-第4章-串、数组和广义表课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据结构-第4章-串、数组和广义表课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 数组 广义 课件
- 资源描述:
-
1、北京林业大学信息学院北京林业大学信息学院 Office:西配楼西配楼304(软件教研室)(软件教研室)Email: 2022年年12月月25日日 北京林业大学信息学院北京林业大学信息学院可表示为可表示为:(:(a a1 1,a,a2 2 ,a,an n)线性结构线性结构 第第2 2章章 线性表线性表 第第3 3章章 栈和队列栈和队列 第第4 4章章 串、数组和广串、数组和广义表义表 2022年年12月月25日日 北京林业大学信息学院北京林业大学信息学院串比较,串比较,strcmp(char s1,char s2)strcmp(char s1,char s2)串复制,串复制,strcpy(cha
2、r to,char from)strcpy(char to,char from)串连接,串连接,strcat(char to,char from)strcat(char to,char from)求串长,求串长,strlen(char s)strlen(char s)调用标准库函数调用标准库函数#include#include补充:补充:C C语言中常用的串运算语言中常用的串运算 2022年年12月月25日日 北京林业大学信息学院北京林业大学信息学院第第4 4章串、数组和广义表章串、数组和广义表 4.1 4.1 串串4.2 4.2 数组数组4.3 4.3 广义表广义表 教学内容教学内容 202
3、2年年12月月25日日 北京林业大学信息学院北京林业大学信息学院1.1.掌握串的存储方法,理解串的两种模式匹掌握串的存储方法,理解串的两种模式匹配算法配算法;2.2.明确数组和广义表这两种数据结构的特点明确数组和广义表这两种数据结构的特点,掌握数组存储时地址计算方法,了解几种,掌握数组存储时地址计算方法,了解几种特殊矩阵的压缩存储方法。特殊矩阵的压缩存储方法。教学目标教学目标1.1.了解串的存储方法,理解串的两种模式匹配了解串的存储方法,理解串的两种模式匹配算法,重点掌握算法,重点掌握BFBF算法算法。2.2.明确数组和广义表这两种数据结构的特点,明确数组和广义表这两种数据结构的特点,掌握掌握
4、数组地址计算方法数组地址计算方法,了解几种特殊矩阵,了解几种特殊矩阵的压缩存储方法。的压缩存储方法。3.3.掌握广义表的定义、性质及其掌握广义表的定义、性质及其GetHeadGetHead和和GetTailGetTail的操作的操作。2022年年12月月25日日 北京林业大学信息学院北京林业大学信息学院4.1 4.1 串的定义串的定义串串(String)-(String)-零个或多个字符组成的有限序列零个或多个字符组成的有限序列21naaas串名串名串值串值串长串长n空串空串n=0 2022年年12月月25日日 北京林业大学信息学院北京林业大学信息学院a=a=BEIBEI,b=b=JINGJI
5、NG c=c=BEIJINGBEIJING d=d=BEI JINGBEI JING子串子串字符位置字符位置主串主串子串位置子串位置串相等串相等空格串空格串北京林业大学信息学院北京林业大学信息学院4.2 4.2 案例引入案例引入案例案例4.1 4.1:病毒感染检测:病毒感染检测研究者将人的研究者将人的DNADNA和病毒和病毒DNADNA均表示成由一些字母组成的均表示成由一些字母组成的字符串序列。字符串序列。然后检测某种病毒然后检测某种病毒DNADNA序列是否在患者的序列是否在患者的DNADNA序列中出现序列中出现过,如果出现过,则此人感染了该病毒,否则没有感染。过,如果出现过,则此人感染了该病
6、毒,否则没有感染。例如,假设病毒的例如,假设病毒的DNADNA序列为序列为baabaa,患者,患者1 1的的DNADNA序列为序列为aaabbbaaaabbba,则感染,患者,则感染,患者2 2的的DNADNA序列为序列为babbbababbba,则未感染。,则未感染。(注意,人的(注意,人的DNADNA序列是线性的,而病毒的序列是线性的,而病毒的DNADNA序列是环序列是环状的状的)北京林业大学信息学院北京林业大学信息学院 北京林业大学信息学院北京林业大学信息学院4.3 4.3 串的类型定义、存储结构及运算串的类型定义、存储结构及运算0n ,2,1,|nietCharacterSaaDii数
7、据对象数据对象:数据关系数据关系:,2,1,|,111niDaaaaRiiii基本操作基本操作:(1)StrAssign(&T,chars)/串赋值串赋值(2)StrCompare(S,T)/串比较串比较(3)StrLength(S)/求串长求串长(4)Concat(&T,S1,S2)/串联串联 ADT String 2022年年12月月25日日 北京林业大学信息学院北京林业大学信息学院 (5)SubString(&Sub,S,pos,len)/求子串求子串 (6)StrCopy(&T,S)/串拷贝串拷贝 (7)StrEmpty(S)/串判空串判空 (8)ClearString(&S)/清空串
8、清空串 (9)Index(S,T,pos)/子串的位置子串的位置 (11)Replace(&S,T,V)/串替换串替换 (12)StrInsert(&S,pos,T)/子串插入子串插入 (12)StrDelete(&S,pos,len)/子串删除子串删除 (13)DestroyString(&S)/串销毁串销毁ADT String 2022年年12月月25日日 北京林业大学信息学院北京林业大学信息学院顺序存储顺序存储链式存储链式存储串的存储结构串的存储结构北京林业大学信息学院北京林业大学信息学院typedef structtypedef struct char char*ch;/ch;/若串非
9、空若串非空,则按串长分配存储区则按串长分配存储区,/否则否则chch为为NULLNULL int length;/int length;/串长度串长度 HString;HString;顺序存储表示顺序存储表示北京林业大学信息学院北京林业大学信息学院ABCDEFGHI#headABCIhead.链式存储表示链式存储表示 2022年年12月月25日日 北京林业大学信息学院北京林业大学信息学院#define CHUNKSIZE 80 /可由用户定义的块大小可由用户定义的块大小typedef struct Chunk char chCHUNKSIZE;struct Chunk*next;Chunk;t
10、ypedef struct Chunk*head,*tail;/串的头指针和尾指针串的头指针和尾指针 int curlen;/串的当前长度串的当前长度LString;链式存储表示链式存储表示 2022年年12月月25日日 北京林业大学信息学院北京林业大学信息学院可将多个字符存放在一个结点中,以克服其缺点可将多个字符存放在一个结点中,以克服其缺点优点:操作方便优点:操作方便缺点:存储密度较低缺点:存储密度较低实际分配的存储位实际分配的存储位串值所占的存储位串值所占的存储位存储密度存储密度 ABCDEFGHI#headABCIhead.链式存储表示链式存储表示 2022年年12月月25日日 北京林
11、业大学信息学院北京林业大学信息学院算法目的:算法目的:BFBF算法算法(又称古典的、经典的、朴素的、穷举的)(又称古典的、经典的、朴素的、穷举的)KMPKMP算法(特点:速度快)算法(特点:速度快)算法种类:算法种类:确定主串中所含子串第一次出现的位置(定位)确定主串中所含子串第一次出现的位置(定位)即如何实现教材即如何实现教材P72 Index(S,T,pos)函数函数串的模式匹配算法串的模式匹配算法北京林业大学信息学院北京林业大学信息学院 BFBF算法设计思想算法设计思想北京林业大学信息学院北京林业大学信息学院 将主串的第将主串的第pospos个字符和模式的第一个字符比较,个字符和模式的第
12、一个字符比较,若若相等相等,继续逐个比较后续字符;,继续逐个比较后续字符;若若不等不等,从主串的下一字符起,重新与模式的,从主串的下一字符起,重新与模式的第一个字符比较。第一个字符比较。直到主串的一个连续子串字符序列与模式相等直到主串的一个连续子串字符序列与模式相等 。返回值为返回值为S S中与中与T T匹配的子序列匹配的子序列第一个字符的序号第一个字符的序号,即匹配成功。即匹配成功。否则,匹配失败,返回值否则,匹配失败,返回值 0 0BFBF算法设计思想算法设计思想Index(S,T,pos)北京林业大学信息学院北京林业大学信息学院int Index(Sstring S,Sstring T,
13、int pos)i=pos;j=1;while(i=S 0&j T 0)return iT0;else return 0;BFBF算法描述(算法算法描述(算法4.14.1)北京林业大学信息学院北京林业大学信息学院若若n n为主串长度,为主串长度,m m为子串长度,最坏情况是为子串长度,最坏情况是BFBF算法时间复杂度算法时间复杂度主串前面主串前面n-mn-m个位置都部分匹配到子串的最后一个位置都部分匹配到子串的最后一位,即这位,即这n-mn-m位各比较了位各比较了m m次次最后最后m m位也各比较了位也各比较了1 1次次总次数为:总次数为:(n-m)*m+m(n-m+1)*m若若mn,则算法复
14、杂度,则算法复杂度O(n*m)例:例:S=S=00000000010000000001,T=T=00010001,pos=1pos=1 2022年年12月月25日日 北京林业大学信息学院北京林业大学信息学院KMPKMP(KnuthKnuth Morris Pratt Morris Pratt)算法)算法http:/www-cs-faculty.stanford.edu/knuth/计算机程序设计艺术计算机程序设计艺术 第第1卷卷 基本算法基本算法 计算机程序设计艺术计算机程序设计艺术 第第2卷卷 半数值算法半数值算法计算机程序设计艺术计算机程序设计艺术 第第3卷卷 排序与查找排序与查找北京林业
15、大学信息学院北京林业大学信息学院利用已经利用已经部分匹配部分匹配的结果而加快模式串的滑动速度?的结果而加快模式串的滑动速度?且主串且主串S S的指针的指针i i不必回溯不必回溯!可提速到!可提速到O(n+m)O(n+m)!S=a b a b c a b c a c b a bT=T=a b c a cS=a b a b c a b c a c b a bT=T=a b c a cS=a b a b c a b c a c b a bT=T=a b c a ci ii ii ik kk k a b aa b ck ki ii iKMPKMP算法设计思想算法设计思想 第第 1 次匹配次匹配 s s
16、=abacaba=abacabab b i=4 p p=abab=abab j=4 失败失败 p p=abab=abab j=2 因因p p1 1pp2 2,s,s2 2=p=p2 2,必有必有s s2 2pp1 1,又因又因p p1 1=p=p3 3,s,s3 3=p=p3 3,所以必有所以必有s s3 3=p=p1 1。因此。因此,第二次匹配可直接从第二次匹配可直接从i=4,j=2i=4,j=2开始。开始。北京林业大学信息学院北京林业大学信息学院改进:改进:每趟匹配过程中出现字符比较不等时,不回溯每趟匹配过程中出现字符比较不等时,不回溯主指针主指针i,利用已得到的,利用已得到的“部分匹配部
17、分匹配”结果将模式向结果将模式向右滑动尽可能远的一段距离,继续进行比较。右滑动尽可能远的一段距离,继续进行比较。北京林业大学信息学院北京林业大学信息学院s s1 1 s s2 2 s s3 3ssi-j+1i-j+1 s si-j+2i-j+2ssi-2i-2 s si-1i-1 s si i s si+1i+1 p p1 1 p p2 2 p pj-2j-2 p pj-1j-1 p pj j p pj+1j+1 p p1 1 p pk-1k-1 p pk k p pk+1k+1“p1p2pk-1”=“si-k+1si-k+2si-1”“pj-k+1pj-k+2pj-1”=“si-k+1si-
18、k+2si-1”(部分匹配部分匹配)“p1p2pk-1”=“pj-k+1pj-k+2pj-1”(真子串真子串)北京林业大学信息学院北京林业大学信息学院 max k|1kj,且且“p1pk-1”=“pj-k+1pj-1”当此集合非空时当此集合非空时 0 0 当当j=1j=1时时 1 1 其他情况其他情况nextj=为此为此,定义定义nextj函数,表明当模式中第函数,表明当模式中第j个字符与主个字符与主串中相应字符串中相应字符“失配失配”时,在模式中需重新和主串时,在模式中需重新和主串中该字符进行比较的字符的位置。中该字符进行比较的字符的位置。北京林业大学信息学院北京林业大学信息学院int In
19、dex_KMP(SString S,SString T,int pos)i=pos,j=1;while(iS0&jT0)return i-T0;/*匹配成功匹配成功*/else return 0;/*返回不匹配标志返回不匹配标志*/北京林业大学信息学院北京林业大学信息学院l如何求如何求next函数值函数值1.next1=0;表明主串从下一字符表明主串从下一字符si+1起和模式串重新起和模式串重新开始匹配。开始匹配。i=i+1;j=1;2.设设nextj=k,则,则nextj+1=?若若pk=pj,则有,则有“p1pk-1pk”=“pj-k+1pj-1pj”,如果,如果在在 j+1发生不匹配,说
20、明发生不匹配,说明nextj+1=k+1=nextj+1。若若pkpj,可把求,可把求next值问题看成是一个模式匹配问值问题看成是一个模式匹配问 题,整个模式串既是主串,又是子串。题,整个模式串既是主串,又是子串。北京林业大学信息学院北京林业大学信息学院 p p1 1 p p2 2p pj-k+1j-k+1ppj-1j-1 p pj j p pj+1 j+1 nextj=knextj=k p p1 1 p pk-1k-1 p pk k p pk+1 k+1 nextk=knextk=k p p1 1 p pk k p pk k+1 +1 nextknextk=k=k”p p1 1 p pk
21、k p pk k+1+1 nextknextk=k=k l若若pk=pj,则有,则有“p1pk”=“pj-k+1pj”,nextj+1=k+1=nextk+1=nextnextj+1.l若若pk”=pj,则有,则有“p1pk”=“pj-k”+1pj”,nextj+1=k”+1=nextk+1=nextnextk+1.lnextj+1=1.北京林业大学信息学院北京林业大学信息学院 j 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17模式串模式串 a b c a a b b c a b c a a b d a b 0nextj1 1 1 2 2 3 1 1 23
展开阅读全文