串的定义及其基本运算课件.ppt

上传人(卖家):晟晟文业 文档编号:4997418 上传时间:2023-02-01 格式:PPT 页数:27 大小:213KB
下载 相关 举报
串的定义及其基本运算课件.ppt_第1页
第1页 / 共27页
串的定义及其基本运算课件.ppt_第2页
第2页 / 共27页
串的定义及其基本运算课件.ppt_第3页
第3页 / 共27页
串的定义及其基本运算课件.ppt_第4页
第4页 / 共27页
串的定义及其基本运算课件.ppt_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、4.1 串的定义及其基本运算4.2 串的定长顺序存储及基本运算4.3 串的堆存储结构第四章 串作业6:P235(1,2)4.1.1串的定义v定义:串(string)是由零个或多个任意字符组成的字符序列,又称为字符串(character string),一般记为:4.1 串的定义及其基本运算s=a1 a2 a3an说明:1)其中s是串名,用双引号括起来的字符序列是串的值。2)ai(1=i1.子串:字符串中任意个连续的字符构成的序列;母串:包含该子串的字符串;两串相等:两个字符串的长度相等且各对应位置上的字符都相同.字符的位置:从1开始子串的位置:该子串第一个字符的位置4.1.2 串的基本运算1.

2、求串的长度StrLength(s);2.串赋值StrAssign(s1,s2);3.两个串的连接StrConcat(s1,s2,s)或StrConcat(s1,s2)4.求某串的子串SubStr(s,i,len);5.串比较StrCmp(s1,s2);6.子串定位StrIndex(s,t);7.插入子串StrInsert(s,i,t);8.删除子串StrDelete(s,i,len);9.置换StrRep(s,t,r)。4.2.1存储结构的实现#define MAXSIZE 256typedef struct char dataMAXSIZE;int curlen;SeqString;4.2串

3、的定长顺序存储及基本运算第一种:第二种:#define MAXSIZE 256char sMAXSIZE;abefi0256s.curlencdgh13478s.dataMAXSIZE-1abefi0256cdgh1347809MAXSIZE-1第三种:#define MAXSIZE 256char sMAXSIZE+1;abefi0256cdgh1347899MAXSIZE4.2.2运算实现(采用第二种表示串长的方式)1.求串的长度StrLength(s);int StrLength(char s)int len=0;while(slen!=0)len+;return len;2.串赋值St

4、rAssign(s1,s2);void StrAssign(s1,s2)char s1,s2 ;int j=0;while(s2j!=0)s1j=s2j;j+;s1j=0;3.两个串的连接StrConcat1(s1,s2,s)4.求某串的子串SubStr(s,i,len);5.串比较StrCmp(s1,s2);4.2.3模式匹配设s和t是给定的两个串,在主串s中查找子串t的过程称为。其中t也称为模式。为运算方便,字符串采用定长存储,且用第三种方式表示串长:#define MAXSIZE 256char sMAXSIZE+1;abefi0256cdgh1347899MAXSIZE1.简单的模式匹

5、配算法(BF算法)(1)算法思想:例:主串S:“acabaabaabcacaabc”模式串t:“abaabcac”s:a c a b a a b a a b c a c a a b c t:a b a a b c a c i=1j=1 s:a c a b a a b a a b c a c a a b c t:a b a a b c a ci=2j=2if(si=tj)i+;j+;if(si!=tj)i回溯到本趟开始的下一个;j回溯到1;s:a c a b a a b a a b c a c a a b c t:a b a a b c a ci=2j=1 s:a c a b a a b a a

6、 b c a c a a b c t:a b a a b c a ci=3j=1i=4j=2i=5j=3i=6j=4i=7j=5i=8j=6 s:a c a b a a b a a b c a c a a b c t:a b a a b c a ci=4j=1 s:a c a b a a b a a b c a c a a b c t:a b a a b c a ci=5j=1i=6j=2 s:a c a b a a b a a b c a c a a b c t:a b a a b c a ci=6j=1i=7j=2i=8j=3i=9j=4i=10j=5i=11j=6i=12j=7i=13j

7、=8i=14j=9(2)算法实现循环条件?什么时候回溯?回溯时i、j如何计算?如何判断匹配是否成功?匹配成功时,返回的起始位置如何计算?见P59的算法4-42.改进后的模式匹配算法(KMP算法)s:a c a b a a b a a b c a c a a b c t:a b a a b c a ci=8j=6 s:a c a b a a b a a b c a c a a b c t:a b a a b c a ci=8k=3(1)KMP算法思想:i不回溯,j也不是回溯到1,而是回溯到k,也就是模式t向右滑动到某个位置k。(2)k位置的确定next函数用next函数来确定k的值,即k=nex

8、t(j);j1 2 3 4 5 6 7 8模式串a b a a b c a cnext(j)例4-1求模式串“abaabcac”的next函数值 next(j)=maxk|1=kj且”t1t2tk-1”=”tj-k+1tj-k+2tj-1”1 其他情况0 j=101122312 练习:求下列模式串的next函数值 AAAB AABAACAABABA ABRACADABRA ASSTACASTRA 例:主串S:“aabcbabcaabcaababc”模式串t:“abcaababc”j1 2 3 4 5 6 7 8 9模式串a b c a a b a b cnextj 0 11122323 s:a

9、 a b c b a b c a a b c a a b a b c t:a b c a a b a b c i=1j=1i=2j=2 s:a a b c b a b c a a b c a a b a b c t:a b c a a b a b c i=2j=1i=3j=2i=4j=3i=5j=4j1 2 3 4 5 6 7 8 9模式串a b c a a b a b cnextj 0 11122323 s:a a b c b a b c a a b c a a b a b c t:a b c a a b a b c i=5j=1 s:a a b c b a b c a a b c a a

10、b a b c t:a b c a a b a b c i=6j=1i=7j=2i=8j=3i=9j=4i=10j=5i=11j=6i=12j=7 s:a a b c b a b c a a b c a a b a b c t:a b c a a b a b c i=12j=3i=13j=4i=14j=5i=15j=6i=16j=7i=17j=8i=18j=9i=19j=10(3)KMP算法实现循环条件?什么时候回溯?回溯时i、j如何计算?如何判断匹配是否成功?匹配成功时,返回的起始位置如何计算?见P61的算法4-5(4)如何求next函数next1=0;设nexti-1=k,如何求nexti

11、?(令j=i)j1 2 3 4 5 6 7 8 9模式串a b c a b c d b cnextj0 i=2j=1k=nextj=01next(j)=maxk|1=kj且”t1t2tk-1”=”tj-k+1tj-k+2tj-1”1 其他情况0 j=1第一种情况:k=0nexti=k+1;第二种情况:tk=tjj1 2 3 4 5 6 7 8 9模式串a b c a b c d b cnextj0 1 1 1 23i=6j=5nexti=k+1;k=2第三种情况:tk tj j1 2 3 4 5 6 7 8 9模式串a b a a b a b b a nextj0 1 1 2 2 3 4i=8

12、j=73(1)回溯k=nextk直至tj=tkj1 2 3 4 5 6 7 8 9模式串a b c a b c d b cnextj0 1 1 1 2 3 4i=8j=71(2)回溯k=nextk直至k=0 k=4k=2k=4k=1k=0 nexti=k+1;nexti=k+1;j1 2 3 4 5 6 7 8 9模式串a b c a a b a b cnextj 0 i=2:j=1,k=next 1=0next i=k+1=1 i=3:j=2,k=next 2=1,tk tj,k回溯111k=next 1=0next i=k+1=1 i=4:j=3,k=next 3=1,tk tj,k回溯k

13、=next 1=0next 4=k+1=1求nexti:i=1next i=0i=5:j=4,k=next 4=1,tk=tjnext i=k+1=2 2 i=6:j=5,k=next 5=2,tk tj,k回溯23k=next 2=1,tk=tjnext i=k+1=2 i=7:j=6,k=next 6=2,tk=tjnext i=k+1=3 j1 2 3 4 5 6 7 8 9模式串a b c a a b a b cnextj 01112i=8:j=7,k=next 7=3,tk tj,k回溯k=next 3=1,tk=tjnext i=k+1=2 2i=9:j=8,k=next 8=2,

14、tk=tjnext i=k+1=3 3算法实现:void GetNext(char t,int next)int i=2,j,k;next1=0;j=i-1;k=nextj;while(i=t0)if(k=0|tk=tj)nexti=k+1;i+;j=i-1;k=nextj;else k=nextk;/*k回溯*/理解P63算法4-6 作业:根据NEXT算法求下列模式串的next函数值(写出过程)AAAB ABRACADABRA ASSTACASTRA 练习:根据NEXT算法求下列模式串的next函数值(写出过程)AABAACAABABA 4.3 串的堆存储结构4.3.1 串名的存储映像 1.

15、带串长度的索引表typedef struct char nameMAXNAME;int length;char *stradr;LNode;2.带末尾指针的索引表typedef struct char nameMAXNAME;char *stradr,*enadr;ENode;3.带特征位的索引表typedef struct char nameMAXNAME;int tag;union char *stradr,char value4;uval;TNode;4.3.2 堆存储结构基本思想:v 在内存中开辟能存储足够多的串、地址连续的存储空间作为应用程序只所有串的可利用存储空间,称为堆空间。(未分配区域)(已分配区域)char storeSMAX+1;int free;typedef structint length;int stradr;Hstring;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(串的定义及其基本运算课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|