ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:40.30KB ,
资源ID:6766041      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6766041.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构练习第四章 串.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构练习第四章 串.docx

1、数据结构练习第四章 串数据结构练习第四章 串一、选择题1函数substr(“DATASTRUCTURE”,5,9)的返回值为( )。A. “STRUCTURE” B.“DATA”C. “ASTRUCTUR” D. “DATASTRUCTURE”2字符串的长度是指( )。A. 串中不同字符的个数 B. 串中不同字母的个数C. 串中所含字符的个数 D. 串中不同数字的个数3两个字符串相等的充要条件是( )。A. 两个字符串的长度相等 B. 两个字符串中对应位置上的字符相等C. 同时具备(A)和(B)两个条件 D. 以上答案都不对4关于串的叙述中,正确的是( )A空串是只含有零个字符的串B.空串是只

2、含有空格字符的串C.空串是含有零个字符或含有空格字符的串D.串是含有一个或多个字符的有穷序列5下面关于串的的叙述中,哪一个是不正确的?( )A串是字符的有限序列 B空串是由空格构成的串C模式匹配是串的一种重要运算 D串既可以采用顺序存储,也可以采用链式存储6设有两个串S1和S2,求S2在S1中首次出现的位置的运算称作( )A求子串 B.判断是否相等 C模型匹配 D.连接 7若串S=software,其子串的数目是( )。A8 B37 C36 D98串的长度是指( )A串中所含不同字母的个数 B串中所含字符的个数C串中所含不同字符的个数 D串中所含非空格字符的个数9串是一种特殊的线性表,其特殊性

3、体现在( )。A数据元素是一个字符 B. 可以顺序存储C. 数据元素可以是多个字符 D. 可以链接存储10下面关于串的的叙述中,哪一个是不正确的(B )A. 串是字符的有限序列 B. 空串是由空格构成的串C. 模式匹配是串的一种重要运算 D. 串既可以采用顺序存储,也可以采用链式存储11若串software,其非平凡子串(非空且不同于串本身)的数目是(C )A. 8 B. 37 C. 35 D. 912串是一种特殊的线性表,其特殊性体现在( B )A. 可以顺序存储 B. 数组元素是一个字符 C. 可以连续存储 D. 数据元素可以是多个字符13. 下面关于串的的叙述中,哪一个是不正确的?( B

4、 )A串是字符的有限序列 B空串是由空格构成的串C模式匹配是串的一种重要运算 D串既可以采用顺序存储,也可以采用链式存储二、填空题1两个串是相等的,当且仅当两个串的长度相等且_对应位置_的字符都相同。2串是一种特殊的线性表,串常见的存储结构有顺序存储和_链式存储_两种方式。3空格串是指_,其长度等于_。 (1) 由空格字符(ASCII值32)所组成的字符串 (2)空格个数4一个字符串中_称为该串的子串 。任意个连续的字符组成的子序列5字符串ababaaab的nextval函数值为_。010104216串是一种特殊的线性表,其特殊性表现在_(1)_;串的两种最基本的存储方式是_(2)_、_(3)

5、_;两个串相等的充分必要条件是_(4)_。(1)其数据元素都是字符(2)顺序存储(3)和链式存储(4)串的长度相等且两串中对应位置的字符也相等7下列程序读入无符号16进制数(出现的字母为小写),将其转换为十进制数输出。请将程序空缺部分补全。int f(char *s)int n=0, i; for(i=0;si!=0; i+) n=n*16+ (1) ;return n;main()char s10;scanf(“%s”,s); printf(“%dn”, (2) );(1)(si=97?si-87:si-48) a到f的ASCII码是97到102(2)f(s)8下列算法实现求采用顺序结构存储

6、的串s和串t的一个最长公共子串。void maxcomstr(orderstring *s,*t, int index, length)int i,j,k,length1,con; index=0;length=0;i=1; while (i=s.len) j=1;while(jlength) index=i; length=length1; (3)_; else (4) _; (5) _ 题目分析本题算法采用顺序存储结构求串s和串t的最大公共子串。串s用i指针(1=i=s.len)。t串用j指针(1=j=t.len)。算法思想是对每个i(1=i=s.len,即程序中第一个while循环),来

7、求从i开始的连续字符串与从j(1=j=t.len,即程序中第二个while循环)开始的连续字符串的最大匹配。程序中第三个(即最内层)的while循环,是当s中某字符(si)与t中某字符(tj)相等时,求出局部公共子串。若该子串长度大于已求出的最长公共子串(初始为),则最长公共子串的长度要修改。(1)i+k=s.len & j+k=t.len & si+k=tj+k 如果在s和t的长度内,对应字符相等,则指针k 后移(加1) (2)con=0 s和t对应字符不等时置标记退出 (3)j=j+k 在t串中,从第j+k字符再与si比较 (4)j=j+1 t串取下一字符(5) i=i+1 s串指针i后移

8、(加1)。9试利用下列栈和串的基本操作完成下述填空题。initstack(s) 置s为空栈;push(s,x) 元素x入栈;pop(s) 出栈操作;gettop(s) 返回栈顶元素;sempty(s) 判栈空函数;setnull(st) 置串st为空串;length(st) 返回串st的长度;equal(s1,s2) 判串s1和s2是否相等的函数;concat(s1,s2) 返回联接s1和s2之后的串;sub(s,i,1) 返回s中第i个字符;empty(st) 判串空函数FUNC invert(pre:string; VAR exp:string):boolean;若给定的表达式的前缀式pr

9、e正确,本过程求得和它相应的表达式exp并返回“true”,否则exp为空串,并返回“false”。已知原表达式中不包含括弧,opset为运算符的集合。VAR s:stack; i,n:integer; succ:boolean; ch: char;BEGINi:=1; n:=length(pre); succ:=true;(1)_; (2)_;WHILE (in) AND succ DO BEGIN ch:=sub(pre,i,l);IF (3)_ THEN (4)_ELSE IF (5)_THEN (6)_ELSE BEGIN exp:=concat(7)_,(8)_);exp:=conc

10、at(9)_,(10)_);(11)_;END;i:=i+1END;IF (12)_THEN BEGIN exp:=concat(exp,sub(pre,n,1); invert:=true ENDELSE BEGIN setnull(exp); invert:=false ENDEND;注意:每个空格只填一个语句。 (1)initstack(s) 栈s初始化为空栈 (2) setnull (exp) 串exp初始化为空串 (3) ch in opset 判取出字符是否是操作符 (4) push (s,ch) 如ch是运算符,则入运算符栈s (5) sempty (s) 判栈s是否为空 (6)

11、 succ := false 若读出ch是操作数且栈为空,则按出错处理 (7) exp (8) ch 若ch是操作数且栈非空,则形成部分中缀表达式 (9) exp (10) gettop(s) 取栈顶操作符 (11) pop(s) 操作符取出后,退栈(12) sempty(s) 将pre的最后一个字符(操作数)加入到中缀式exp的最后三、判断题1( )子串“ABC”在主串“AABCABCD”中的位置为2。T 2( )KMP算法的特点是在模式匹配时指示主串的指针不会变小。3( )设模式串的长度为m,目标串的长度为n,当nm且处理只匹配一次的模式时,朴素的匹配(即子串定位函数)算法所花的时间代价可

12、能会更为节省。4( )串是一种数据对象和操作都特殊的线性表。5( )串长度是指串中不同字符的个数。6( ) 如果两个串含有相同的字符,则这两个串相等。X7( )KMP算法的最大特点是指示主串的指针不回溯。四、简答题1KMP算法(字符串匹配算法)较Brute(朴素的字符串匹配)算法有哪些改进?朴素的模式匹配(BruteForce)时间复杂度是(mn),KMP算法有一定改进,时间复杂度达到(mn)。主要优点是主串指针不回溯。当主串很大不能一次读入内存且经常发生部分匹配时,KMP算法的优点更为突出。2给出字符串abacabaaad在KMP算法中的next和nextval数组。模式串的next函数定义

13、如下: 根据此定义,可求解模式串abacabaaad的next和nextval值如下:j1 2 3 4 5 6 7 8 9 10 t串a b a c a b a a a d nextj0 1 1 2 1 2 3 4 2 2 nextvalj0 1 0 2 0 1 0 4 2 2 3模式匹配算法是在主串中快速寻找模式的一种有效的方法,如果设主串的长度为m,模式的长度为n,则在主串中寻找模式的KMP算法的时间复杂性是多少?如果,某一模式 P=abcaacabaca,请给出它的NEXT函数值及NEXT函数的修正值NEXTVAL之值。KMP算法的时间复杂性是O(m+n)。p的next和nextval值

14、分别为01112212321和01102201320。4设目标为S=abcaabbcaaabababaabca,模式为P=babab。(1)手工计算模式P的nextval数组的值;(2)写出利用求得的nextval数组,按KMP算法对目标S进行模式匹配的过程。(1)p的nextval函数值为01010。(next函数值为01123) (2)利用所得nextval数值,手工模拟对s的匹配过程。5s是字符数组,s0中存放的是该字符串的有效长度,假设s1.7中字符串的内容为“abcabaa”,说明下列程序的功能及执行结果。 #define len 8int k, nlen;char slen=“7a

15、bcabaa”;void unknown3(char T)int i, j;i=1; n1=0; j=0;while (ilen)if (j=0 | Ti=Tj)+i; +j;if(Ti!=Tj) ni=j; else ni=nj;else j=nj;main()unknown3(s); for (k=1;klen; k+) printf(“%d”,nk;)本程序的功能是求字符串的nextval函数,程序执行结果是0110132。6给出KMP算法中失败函数f的定义,并说明利用f进行串模式匹配的规则,该算法的技术特点是什么?这里失败函数f,即是通常讲的模式串的next函数,其定义见本章应用题的第

16、5题。进行模式匹配时,若主串第i个字符与模式串第j个字符发生失配,主串指针i不回溯,和主串第i个字符进行比较的是模式串的第nextj个字符。模式串的next函数值,只依赖于模式串,和主串无关,可以预先求出。该算法的技术特点是主串指针i不回溯。在经常发生“部分匹配”和主串很大不能一次调入内存时,优点特别突出。7已知:s=(xyz)+,t=(x+z)*y。试利用联结、求子串和置换等基本运算,将s转化为t 。【北方交通大学 1996 一.3(5分)】题中所给操作的含义如下:连接函数,将两个串连接成一个串substr(s,i,j):取子串函数,从串s的第i个字符开始,取连续j个字符形成子串replac

17、e(s1,i,j,s2):置换函数,用s2串替换s1串中从第i个字符开始的连续j个字符本题有多种解法,下面是其中的一种:(1) s1=substr(s,3,1) 取出字符:y(2) s2=substr(s,6,1) 取出字符:+(3) s3=substr(s,1,5) 取出子串:(xyz)(4) s4=substr(s,7,1) 取出字符:*(5) s5=replace(s3,3,1,s2)形成部分串:(x+z)(6) s=s5s4s1 形成串t即(x+z)*y8. 已知模式串pat=ADABBADADA,写出该模式串的next函数值和nextval值;(4分)五、应用题模式串t=abaabc

18、,求t的next 函数值。 j1 2 3 4 5 6模式串a b a a b cnextj【解答】 j1 2 3 4 5 6模式串a b a a b cnextj0 1 1 2 2 3评分标准:全题4分,错误酌情扣分六、算法设计题1设计在顺序存储结构上实现求子串算法。void substring(char s , long start, long count, char t ) long i,j,length=strlen(s); if (startlength) printf(The copy position is wrong); else if (start+count-1length)

19、 printf(Too characters to be copied);else for(i=start-1,j=0; in-1),返回子串在主串的位置(i-j)。否则,当im-n则为匹配失败。int index(char s,t,int m,n)字符串s和t用一维数组存储,其长度分别为m和n本算法求字符串t在字符串s中的第一次出现,匹配成功输出t串在s中的位置,否则输出0int i=0,j=0; while(i=m-n & j=n-1) if(si=tj)i+;j+; 对应字符相等,指针后移 else i=i-j+1;j=0; 对应字符不相等,i回溯,j仍为0 if(i=m-n & j=n

20、) printf(“t在s串中位置是%d”,i-n+1);return(i-n+1);匹配成功else return(0); 匹配失败算法index结束main ()主函数char s,t; int m,n,i; scanf(“%d%d”,&m,&n); 输入两字符串的长度 scanf(“%s”,s); 输入主串 scanf(“%s”,t); 输入子串 i=index(s,t,m,n);程序结束程序讨论因用C语言实现,一维数组的下标从0开始,m-1是主串最后一个字符的下标,n-1是t串的最后一个字符的下标。若匹配成功,最佳情况是s串下标0到n-1的字符与t匹配,时间复杂度为O(n);匹配成功的

21、最差情况是,每次均在t的最后一个字符才失败,直到s串的下标为m-n时成功,其时间复杂度为O(m-n)*n),即O(m*n)。失败的情况是s串的第m-n个字符比t串某字符比较失败,时间复杂度为O(m*n)。之所以串s的指针i最大到m-n,是因为在m-n之后,所剩串的长度已经小于子串长度n,故不必再去比较。算法中未讨论输入错误(如s串长度小于t串长度)。另外,根据子串的定义,返回值i-n+1是子串在主串中的位置,子串在主串中的下标是i-n。3以顺序存储结构表示串,设计算法。求串S中出现的第一个最长重复子串及其位置并分析算法的时间复杂度。【东南大学 2000五(15分)】【西北大学2002六(15分

22、)】题目分析设以字符数组s表示串,重复子串的含义是由一个或多个连续相等的字符组成的子串,其长度用max表示,初始长度为0,将每个局部重复子串的长度与max相比,若比max大,则需要更新max,并用index记住其开始位置。int LongestString(char s)串用一维数组s存储,本算法求最长重复子串,返回其长度int index=0,max=0; index记最长的串在s串中的开始位置,max记其长度 int length=1,i=0,start=0;length记局部重复子串长度,i为字符数组下标 while(si!=0) if(si=si+1) i+; length+; els

23、e 上一个重复子串结束 if(maxlength) max=length; index=start; 当前重复子串长度大,则更新max i+;start=i;length=1; 初始化下一重复子串的起始位置和长度printf(“最长重复子串的长度为%d,在串中的位置%dn”,max,index);return(max);算法结束算法的时间复杂度为O(n),每个字符与其后继比较一次。4编写程序,统计在输入字符串中各个不同字符出现的频度并将结果存入文件(字符串中的合法字符为A-Z这26个字母和0-9这10个数字)。【西北大学 2000 四 (10分)】问题分析由于字母共26个,加上数字符号10个共

24、36个,所以设一长36的整型数组,前10个分量存放数字字符出现的次数,余下存放字母出现的次数。从字符串中读出数字字符时,字符的ASCII代码值减去数字字符 0的ASCII代码值,得出其数值(0.9),字母的ASCII代码值减去字符A的ASCII代码值加上10,存入其数组的对应下标分量中。遇其它符号不作处理,直至输入字符串结束。void Count()统计输入字符串中数字字符和字母字符的个数int i,num36;char ch;for(i0;i=0& ch=A& ch=Z)i=ch-65+10;numi+; 字母字符for(i=0;i10;i+) 输出数字字符的个数printf(“数字d的个数dn”,i,numi);for(i10;i0) sj+=stki- 将第偶数个字符逆序填入原字符数组7若x和y是两个采用顺序结构存储的

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1