- 1、本文档共62页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* int Index_FL(String S, String T, int pos) { slength = S[0]; tlength = T[0]; i = pos; patStartChar = T[1]; patEndChar = T[tlength]; while (i = slength – tlength + 1) { if (S[i] != patStartChar) ++i;//重新查找匹配起始点 else if (S[i+tlength-1] != patEndChar) ++i; // 模式串的“尾字符”不匹配 else { } } return 0; } // 检查中间字符的匹配情况 * k = 1; j = 2; while( j tLength S[i+k]==T[j]) { ++k; ++j; } if ( j == tLength ) return i; else ++i; // 重新开始下一次的匹配检测 * 1. 熟悉串的七种基本操作的定义, 并能利用这些基本操作来实现串的其它 各种操作的方法。 2. 熟练掌握在串的定长顺序存储结 构上实现串的各种操作的方法。 3. 了解串的堆存储结构以及在其上 实现串操作的基本方法。 本章小节 * 4. 理解串匹配的KMP算法,熟悉NEXT 函数的定义,学会手工计算给定模式串 的NEXT函数值和改进的NEXT函数值。 5. 了解串操作的应用方法和特点。 * 课后作业及习题 4.1设 s=‘I AM A STUDENT ’,t=‘GOOD’, q=‘WORKER’. 求:StrLength(s),StrLength(t), SubString(s,8,7),SubSting(t,2,1) ,Index(s,’A’),index(s,t), Replace(s,’STUDENT’,q), Concat(SubString(s,6,2), Concat(t,SubString(s,7,8))) * 4.2令s=‘aaab’,t=‘abcabaa’, u=‘abcaabbabcabaacbacba’。 试分别求出它们的next函数值和nextval函数值 4.3已知主串 s=‘ADBADABBAABADABBADADA’, 模式串 pat=‘ADABBADADA’ 写出模式串的nextval 函数值,并由此画出KMP 算法匹配的全过程。 4.4试写一算法,实现堆存储结构的串的置换操作 Replace(&S,T,V) * * 在上述抽象数据类型定义的13种操作中, 串赋值StrAssign、串复制Strcopy、 串比较StrCompare、求串长StrLength、 串联接Concat以及求子串SubString 等六种操作构成串类型的最小操作子集。 即:这些操作不可能利用其他串操作来 实现, 反之,其他串操作(除串清除 ClearString和串 销毁DestroyString外)可 在这个最小操作子集上实现。 * 例如,可利用串比较、求串长和求子串 等操作实现定位函数Index(S,T,pos)。 算法的基本思想为: StrCompare(SubString(S, i, StrLength(T)),T ) ? 0 S 串 T 串 T 串 i pos n-m+1 * int Index (String S, String T, int pos) { // T为非空串。若主串S中第pos个字符之后存在与 T相等的子串 ,则返回第一个 这样的子串在S中的位置,否则返回0 if (pos 0) { n = StrLength(S); m = StrLength(T); i = pos; while ( i = n-m+1) { SubString (sub, S, i, m); if (StrCompare(sub,T) != 0) ++i ; else return i
文档评论(0)