李春葆《数据结构教程》(第4版)课后习题-串(圣才出品)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第4章串
1.采用顺序结构存储串,编写一个实现串通配符匹配的算法pattern______index(),其中的通配符只有“?”,它可以和任一字符匹配成功,例如,pattern______index(″? re″,″there are″)返回的结果是2。
答:本题的基础是Brute—Force模式匹配算法,只是增加了“?”的处理功能。对应的算法如下:
2.有两个串s1和s2,设计一个算法求这样一个串,该串中的字符是s1和s2中的公共字符。
答:扫描s1,对于当前字符s1.data[i],若在s2中,则将其加入到串s3中。最后返回s3串。对应的算法如下:
3.设目标为t=’abcaabbabcabaacbacba’,模式p=’abcabaa’。(1)计算模式P的nextval函数值。
(2)不写算法,只画出利用KMP算法进行模式匹配时的每一趟匹配过程。答:(1)先计算next数组,在此基础上求nextval数组,如表4-1所示。
表4-1 计算next数组和nextval数组
(2)采用KMP算法求子串位置的过程如下(开始时i=0,j=0):
第1趟匹配:
此时i=4,j=4,匹配失败,而nextval[4]=0,则i=4,j=nextval[4]=0,即:
第2趟匹配:
此时i=6,j=2,匹配失败,而nextval[2]=0,则i=6,j=nextval[2]=0,即:
第3趟匹配:
此时i=6,j=0,匹配失败,而nextval[0]=-1,则i=6,j=nextval[0]=-1。因j=-1,执行i=i+1=7,j=j+1=0,即:
第4趟匹配:
此时i=14,j=7,匹配成功,返回v=i-t.1ength=14-7=7。
上机实验题4
实验题1编写一个程序algo4-1.cpp,实现顺序串的各种基本运算,并在此基础上设计一个程序exp4-1.cpp完成如下功能:
(1)建立串s=″abcdefghefghijklmn″和串sl=″xyz″;
(2)输出串s;
(3)输出串s的长度;
(4)在串s的第9个字符位置插入串s1而产生串s2;
(5)输出串s2;
(6)删除串s第2个字符开始的5个字符而产生串s2;
(7)输出串s2;
(8)将串s第2个字符开始的5个字符替换成串s1而产生串s2;
(9)输出串s2;
(10)提取串s的第2个字符开始的10个字符而产生串s3;
(11)输出串s3;
(12)将串s1和串s2连接起来而产生串s4;
(13)输出串s4。
实验题2编写一个程序algo4-2.cpp,实现链串的各种基本运算,并在此基础上设计一个程序exp4-2.cpp,完成如下功能:
(1)建立串s=″abcdefghefghijklmn″和串sl=″xyz″;
(2)输出串s;
(3)输出串s的长度;
(4)在串s的第9个字符位置插入串s1而产生串s2;
(5)输出串s2;
(6)删除串s第2个字符开始的5个字符而产生串s2;
(7)输出串s2;
(8)将串s第2个字符开始的5个字符替换成串s1而产生串s2;
(9)输出串s2;
(10)提取串s的第2个字符开始的10个字符而产生串s3;
(11)输出串s3;
(12)将串s1和串s2连接起来而产生串s4;
(13)输出串s4。
实验题3 编写一个程序exp4-3.cpp,实现顺序串的各种模式匹配运算,并在此基础上完成如下功能:
(1)建立目标串S="abcabcdabcdeabcdefabcdefg"和模式串t="abcdeabcdefab";
(2)采用简单匹配算法求t在s中的位置;
(3)对模式串t求next数组值和nextval数组值;
(4)采用KMP算法求t在s中的位置;
(5)采用修正后的KMP算法求t在s中的位置。
实验题4 一个文本串可用事先给定的字母映射表进行加密。例如,设字母映射表为:
则字符串“encrypt”被加密为“tkzwsdf”。设计一个程序exp4-4.cpp将输入的文本串进行加密后输出,然后进行解密并输出。
实验题5 采用顺序结构存储串,编写一个程序exp4-5.cpp,求用户输入串s中出现的第一个最长重复子串的下标和长度。