第4章 串(习题)
严蔚敏《数据结构(c语言版)习题集》答案第四章 串

林银花
一、教材说明:
1、 课题:《一定能摸到红球吗?》
2、 本节内容的地位和作用
在现代社会中,人们面临着更多的机会和选择,常常需要在不确定情境中作出合理的决策,概率正是通过对不确定现象和事件发生的可能性的刻画,来为人们更好的制定决策提供依据和建议.本节内容又是义务教育阶段,唯一培养学生从不确定的角度来观察世界的数学内容,让学生了解可能性是普遍的,有助于他们理解社会,适应生活.
(1) 每位同学从盒子中轮流摸球,记录下所摸球的颜色,并将球放回盒中.
(2) 做10次这样的活动,将最终结果填在表中.
(3) 全班将各小组活动进行汇总,摸到红球的次数是多少?摸到黄球的次数是多少?他们各占总数的百分比是多少?
(4) 你认为哪种颜色的球多?打开看一看.
(5) 如果从盒中任意摸出一球,你认为摸到哪种颜色的球可能性大? 学生阅读学习目标.
学生两人一组进行活动.一人摸一人记录.并交流.
题(1):学生先想象后画图,并通过搭建几何体验证学习成果。
题(2):学生四人一组进行活动,一人搭几何体,另三人画图并交流,如有异义,举手询问。依次轮流。 使学生明确学习目标,进入学习角色,做到有的放矢。
目的是使学生体会到进行概率试验时,一定要保证随机性.
课堂组织策略:创设贴近学生生活,生动有趣的问题情境,开展活泼、主动、有效的数学活动,组织学生主动参与、勤于动手、积极思考,使他们在自主探索和合作交流的过程中真正理解和掌握概率有关内容。
学生学习策略:明确学习目标,了解所需掌握的知识,在教师的组织、引导、点拨下主动地从事观察、试验、猜测、验证与交流等数学活动,从而真正有效地理解和掌握知识。
(3)、情感目标:
第四、五章串、数组和广义表练习题答案

第四、五章串、数组和广义表练习题答案一.填空题1. 不包含任何字符(长度为0)的串称为空串;由一个或多个空格(仅由空格符)组成的串称为空白串。
2. 设S=“A;/document/Mary.doc”,则strlen(s)= 20 , “/”的字符定位的位置为3。
3. 子串的定位运算称为串的模式匹配;被匹配的主串称为目标串,子串称为模式。
4. 设目标T=”abccdcdccbaa”,模式P=“cdcc”,则第 6 次匹配成功。
5. 若n为主串长,m为子串长,则串的古典(朴素)匹配算法最坏的情况下需要比较字符的总次数为(n-m+1)*m。
6. 假设有二维数组A6×8,每个元素用相邻的6个字节存储,存储器按字节编址。
已知A的起始存储位置(基地址)为1000,则数组A的体积(存储量)为288 B ;末尾元素A57的第一个字节地址为1282 ;若按行存储时,元素A14的第一个字节地址为(8+4)×6+1000=1072 ;若按列存储时,元素A47的第一个字节地址为(6×7+4)×6+1000)=1276 。
(注:数组是从0行0列还是从1行1列计算起呢?由末单元为A57可知,是从0行0列开始!)7. 〖00年计算机系考研题〗设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为8950 。
答:不考虑0行0列,利用列优先公式:LOC(a ij)=LOC(a c1,c2)+[(j-c2)*(d1-c1+1)+i-c1)]*L 得:LOC(a32,58)=2048+[(58-1)*(60-1+1)+32-1]]*2=89508. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的行下标、列下标和元素值。
9.求下列广义表操作的结果:(1)GetHead【((a,b),(c,d))】=== (a, b) ; //头元素不必加括号(2)GetHead【GetTail【((a,b),(c,d))】】=== (c,d) ;(3)GetHead【GetTail【GetHead【((a,b),(c,d))】】】=== b ;(4)GetTail【GetHead【GetTail【((a,b),(c,d))】】】=== (d);10.C语言规定,字符串常量按_字符数组_____处理,它的值在程序的执行过程中是不能改变的。
第4章 串(习题)

第四章串一、选择题1.下面关于串的的叙述中,哪一个是不正确的?()(2 分)A.串是字符的有限序列 B.空串是由空格构成的串C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储2 若串S1=‘ABCDEFG’, S2=‘9898’ ,S3=‘###’,S4=‘’,执行concat(replace(S1,substr(S1,length(S2),length(S3)),S3),substr(S4,index(S2,‘8’),length(S2))) 其结果为()(7 分)A.ABC###G0123 B.ABCD###2345 C.ABC###G2345 D.ABC###2345E.ABC###G1234 F.ABCD###1234 G.ABC###012343.设有两个串p 和q,其中q 是p 的子串,求q 在p 中首次出现的位置的算法称为()A.求子串 B.联接 C.匹配 D.求串长(2 分)4.已知串S=‘aaab’,其Next 数组值为()。
(2 分)A.0123 B.1123 C.1231 D.12115.串‘ababaaababaa’的next 数组为()。
A.9 B.2 C.6 D.456.字符串‘ababaabab’的nextval 为()A.(0,1,0,1,04,1,0,1) B.(0,1,0,1,0,2,1,0,1)C.(0,1,0,1,0,0,0,1,1) D.(0,1,0,1,0,1,0,1,1 )(2 分)7.模式串t=‘abcaabbcabcaabdab’,该模式串的next 数组的值为(),nextval 数组的值为()。
A.0 1 1 1 2 2 1 1 1 2 3 4 5 6 7 1 2 B.0 1 1 1 2 1 2 1 1 2 3 4 5 6 1 1 2C.0 1 1 1 0 0 1 3 1 0 1 1 0 0 7 0 1 D.0 1 1 1 2 2 3 1 1 2 3 4 5 6 7 1 2E.0 1 1 0 0 1 1 1 0 1 1 0 0 1 7 0 1 F.0 1 1 0 2 1 3 1 0 1 1 0 2 1 7 0 1(2 分)8.若串S=’software’,其子串的数目是()。
李春葆《数据结构教程》(第4版)课后习题-串(圣才出品)

第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。
串(习题)

第四章串一、选择题1.下面关于串的的叙述中,哪一个是不正确的()(2 分)A.串是字符的有限序列B.空串是由空格构成的串C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储2 若串S=‘ABCDEFG’, S2=‘9898’,S3=‘###’,S4=‘012345’,执行concat(replace(S1,substr(S1,length(S2),length(S3)),S3),substr(S4,index(S2,‘8’),length(S2))) 其结果为()(7 分)A.ABC###G0123 B.ABCD###2345 C.ABC###G2345 D.ABC###2345E.ABC###G1234 F.ABCD###1234 G.ABC###012343.设有两个串p 和q,其中q 是p 的子串,求q 在p 中首次出现的位置的算法称为()A.求子串B.联接C.匹配D.求串长(2 分)4.已知串S=‘aaab’,其Next 数组值为()。
(2 分)A.0123 B.1123 C.1231 D.12115.串‘ababaaababaa’的next 数组为()。
A.0 B.012121111212 C.0 D.06.字符串‘ababaabab’的nextval 为()A.(0,1,0,1,04,1,0,1) B.(0,1,0,1,0,2,1,0,1)C.(0,1,0,1,0,0,0,1,1) D.(0,1,0,1,0,1,0,1,1 )(2 分)7.模式串t=‘abcaabbcabcaabdab’,该模式串的next 数组的值为(),nextval 数组的值为()。
A.0 1 1 1 2 2 1 1 1 2 3 4 5 6 7 1 2 B.0 1 1 1 2 1 2 1 1 2 3 4 5 6 1 1 2C.0 1 1 1 0 0 1 3 1 0 1 1 0 0 7 0 1 D.0 1 1 1 2 2 3 1 1 2 3 4 5 6 7 1 2E.0 1 1 0 0 1 1 1 0 1 1 0 0 1 7 0 1 F.0 1 1 0 2 1 3 1 0 1 1 0 2 1 7 0 1(2 分)8.若串S=’software’,其子串的数目是()。
串-第4章-《数据结构题集》答案解析-严蔚敏吴伟民版

串-第4章-《数据结构题集》答案解析-严蔚敏吴伟民版习题集解析部分第4章串——《数据结构题集》-严蔚敏.吴伟民版源码使⽤说明链接☛☛☛课本源码合辑链接☛☛☛习题集全解析链接☛☛☛相关测试数据下载链接☛本习题⽂档的存放⽬录:数据结构\▼配套习题解析\▼04 串⽂档中源码的存放⽬录:数据结构\▼配套习题解析\▼04 串\▼习题测试⽂档-04源码测试数据存放⽬录:数据结构\▼配套习题解析\▼04 串\▼习题测试⽂档-04\Data⼀、基础知识题4.1❶简述空串和空格串(或称空格符串)的区别。
4.2❷对于教科书4.1节中所述串的各个基本操作,讨论是否可由其他基本操作构造⽽得,如何构造?4.3❶设s = ‘I AM A STUDENT’,t = ‘GOOD’,q = ‘WORKER’。
求:StrLength(s),StrLength(t),SubString(s, 8, 7),SubString(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.4❶已知下列字符串a = ‘THIS’, f = ‘A SAMPLE’, c = ‘GOOD’, d = ‘NE’,b = ‘ ’.s = Concat(a, Concat(SubString(f, 2, 7), Concat(b, SubString(a, 3, 2)))),t = Replace(f, SubString(f, 3, 6), c),u = Concat(SubString(c, 3, 1), d),g = ‘IS’,v = Concat(s, Concat(b, Concat(t, Concat(b, u)))),试问:s,t,v,StrLength(s),Index(v, g),Index(u, g)各是什么?4.5❶试问执⾏以下函数会产⽣怎样的输出结果?void demonstrate(){StrAssign(s, ‘THIS IS A BOOK’);Replace(s, SubString(s, 3, 7), ‘ESE ARE’);StrAssign(t, Concat(s, ‘S’));StrAssign(u, ‘XYXYXYXYXYXY’);StrAssign(v, SubString(u, 6, 3));StrAssign(w, ‘W’);printf(‘t=’, t, ‘v=’, v, ‘u=’, Replace(u, v, w));}//demonstrate4.6❷已知:s = ‘(XYZ)+*’,t = ‘(X+Z)*Y’。
第4章习题答案

习题41.名词解释:串、空串、空格串、子串。
解:串是有限的字符序列,从数据结构角度讲,串属于线性结构。
与线性表的不同之处在于串的元素是字符。
空串是不含任何字符的串,其长度为0。
空格是一个字符,其ASCII 码值是32。
空格串是由空格组成的串,其长度等于空格的个数。
串中任意连续的若干字符组成的子序列称为该串的子串。
2.已知三个字符串分别为”“a abcaabcbca ab S =,”“caab S =',”“bcb S ="。
利用串的基本运算得到结果串为”“a aca caabcbca S ='",要求写出得到结果串3S 所用的函数及执行算法。
解:串'"S 可看作由以下两部分组成:”“a caabcbca 和”“a ca ,设这两部分分别叫串s1和s2,要设法从S 、'S 、"S 中得到这两部分,然后使用连接操作连接s1和s2得到'"S 。
i=index();//s1=substr(S ,i,length(S )-i+1);//取出串s1j=index(S ,"S );//求串"S 在串S 中的起始位置,S 串中”“bcb 后是”“a cas2=substr(S ,j+3,length(S )-j-2);//形成串s2'"S =concat(s1,s2);3.已知字符串1S 中存放一段英文,写出算法),3,2,1(n S S S format ,将其按给定的长度n 格式化成两端对齐的字符串2S ,其多余的字符存入3S 。
解:题目要求将字符串S1拆分成字符串S2和S3,要求字符串S2“按给定长度n 格式化为两端对齐的字符串”,即长度为n 且首尾字符不能为空格字符。
算法从左到右扫描字符串S1,找到第一个非空格字符,计数到n ,第n 个拷入字符串S2的字符不能为空格,然后将余下字符复制到字符串S3中。
《数据结构与算法》第四章-串习题

《数据结构与算法》第二部分习题精选一、填空题1. 称为空串;称为空白串。
2. 设S=“A;/document/Mary.doc”,则strlen(s)= , “/”的字符定位的位置为。
3. 子串的定位运算称为串的模式匹配,称为目标串,称为模式。
4. 设目标T=”abccdcdccbaa”,模式P=“cdcc”,则第次匹配成功。
5. 若n为主串长,m为子串长,则串的古典(朴素)匹配算法最坏的情况下需要比较字符的总次数为。
二、单选题()1. 串是一种特殊的线性表,其特殊性体现在:A.可以顺序存储B.数据元素是一个字符C.可以链式存储D.数据元素可以是多个字符()2.设有两个串p和q,求q在p中首次出现的位置的运算称作:A.连接B.模式匹配C.求子串D.求串长()3.设串s1=’ABCDEFG’,s2=’PQRST’,函数con(x,y)返回x和y 串的连接串,subs(s, i, j)返回串s的从序号i开始的j个字符组成的子串,len(s)返回串s的长度,则con(subs(s1, 2, len(s2)), subs(s1, len(s2), 2))的结果串是:A.BCDEF B.BCDEFG C.BCPQRST D.BCDEFEF三、计算题1.设s=’I AM A STUDENT’, t=’GOOD’, q=’WORKER’, 求Replac e(s,’STUDENT’,q)和Concat(SubString(s,6,2), Concat(t,SubString(s,7,8)))。
2.已知主串3.s=’ADBADABBAABADABBADADA’,模式串pat=’ADABBADADA’。
写出模式串的nextval函数值,并由此画出KMP算法匹配的全过程。
答案一、填空题1. 不包含任何字符(长度为0)的串由一个或多个空格(仅由空格符)组成的串2. 20 33.被匹配的主串子串4. 65. (n-m+1)*m二、单选题1. B2. B3. D四、计算题解:①Replace(s,’STUDENT’,q)=’I AM A WORKER’②因为SubString(s,6,2)=‘A ’;SubString(s,7,8)=‘STUDENT’Concat(t,SubString(s,7,8))=’GOOD STUDENT’所以Concat(SubString(s,6,2), Concat(t,SubString(s,7,8)))=‘A GOOD STUDENT’2. 解:(由演示程序得知)nextval函数值为0 1 0 2 1 0 1 0 4 0 在第12个字符处发现匹配!s=’ADBADABBAABADABBADADA’pat=’ADABBADADA’。
《数据结构(C语言版 第2版)》(严蔚敏 著)第四章练习题答案

《数据结构(C语言版第2版)》(严蔚敏著)第四章练习题答案第4章串、数组和广义表1.选择题(1)串是一种特殊的线性表,其特殊性体现在()。
A.可以顺序存储B.数据元素是一个字符C.可以链式存储D.数据元素可以是多个字符若答案:B(2)串下面关于串的的叙述中,()是不正确的?A.串是字符的有限序列B.空串是由空格构成的串C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储答案:B解释:空格常常是串的字符集合中的一个元素,有一个或多个空格组成的串成为空格串,零个字符的串成为空串,其长度为零。
(3)串“ababaaababaa”的next数组为()。
A.012345678999 B.012121111212 C.011234223456 D.0123012322345答案:C(4)串“ababaabab”的nextval为()。
A.010104101B.010102101 C.010100011 D.010101011答案:A(5)串的长度是指()。
A.串中所含不同字母的个数B.串中所含字符的个数C.串中所含不同字符的个数D.串中所含非空格字符的个数答案:B解释:串中字符的数目称为串的长度。
(6)假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存储单元,基地址为10,则LOC[5,5]=()。
A.808 B.818 C.1010 D.1020答案:B解释:以行序为主,则LOC[5,5]=[(5-1)*100+(5-1)]*2+10=818。
(7)设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为()。
A.BA+141 B.BA+180 C.BA+222 D.BA+225答案:B解释:以列序为主,则LOC[5,8]=[(8-1)*8+(5-1)]*3+BA=BA+180。
数据结构教程李春葆课后答案第4章串

失败
i=4 修改 j=4 i=6 修改 j=2 i=6 修改 j=0
i=4 j=nextval[4]=0 i=6 j=nextval[2]=0 i=6 j a a b b a b c a b a a c b a c b a t: abcabaa
失败
s: a b c a a b b a b c a b a a c b a c b a 第 4 趟匹配 成功 i=14 从 i=6, j=-1 开始 j=7 t: abcabaa 图 4.2 改进的 KMP 算法模式匹配的过程
返回 14-7=7
(3)从上述匹配过程看出:第 1 趟到第 4 趟的字符比较次数分别是 5、3、1、7,所 以总共进行了 16 次字符比较。 7. 有两个顺序串 s1 和 s2,设计一个算法求一个顺序串 s3,该串中的字符是 s1 和 s2 中公共字符(即两个串都包含的字符) 。 解:扫描 s1,对于当前字符 s1.data[i],若它在 s2 中出现,则将其加入到串 s3 中。最 后返回 s3 串。对应的算法如下:
第4章 串 break; i++; } i++; //跳过@字符 while (i<s.length &&flag) { e=s.data[i]; if (!Pop(st,x)) flag=false; if (e!=x) flag=false; i++; } if (!StackEmpty(st)) flag=false; DestroyStack(st); return flag; }
SqString CommChar(SqString s1,SqString s2) { SqString s3; int i,j,k=0; for (i=0;i<s1.length;i++) { for (j=0;j<s2.length;j++) if (s2.data[j]==s1.data[i]) break; if (j<s2.length) //s1.data[i]是公共字符 { s3.data[k]=s1.data[i]; k++; } } s3.length=k; return s3; }
第四章串 习题

第四章串习题一、选择题1.串是一种特殊的线性表,其特殊性体现在()A.可以顺序存储 B.数据元素是一个字符 C. 可以链式存储 D.数据元素可以是多个字符2. 空串与空格字符组成的串的区别在于()。
A.没有区别B.两串的长度不相等C.两串的长度相等D.两串包含的字符不相同3.有串S1=”ABCDEFG”, S2=”PQRST”, 假设函数con(x,y)返回x和y串的连接串,subs(s,i,j)返回串s的从数组序号为i(下标从0开始)的字符开始的j个字符组成的子串, len(s)返回串s 的长度,则con(subs(s1,2,len(s2)),subs(s1,len(s2),2))的结果串是( )A.BCDEFB.BCDEFGC.BCPQRSTD.CDEFGFG4.若串s=”sfotware”,其子串的个数是( )A.8B.37C.36D.95. 一个子串在包含它的主串中的位置是指()。
A.子串的最后那个字符在主串中的位置B.子串的最后那个字符在主串中首次出现的位置C.子串的第一个字符在主串中的位置D.子串的第一个字符在主串中首次出现的位置6. 下面的说法中,只有()是正确的。
A.字符串的长度是指串中包含的字母的个数B.字符串的长度是指串中包含的不同字符的个数C.若T包含在S中,则T一定是S的一个子串D.一个字符串不能说是其自身的一个子串7. 两个字符串相等的条件是()。
A.两串的长度相等B.两串包含的字符相同C.两串的长度相等,并且两串包含的字符相同D.两串的长度相等,并且对应位置上的字符相同8. 若SUBSTR(S,i,k)表示求S中从第i个字符开始的连续k个字符组成的子串的操作,则对于S=“Beijing&Nanjing”,SUBSTR(S,4,5)=()。
A. “ijing”B. “jing&”C. “ingNa”D. “ing&N”9. 若INDEX(S,T)表示求T在S中的位置的操作,则对于S=“Beijing&Nanjing”,T=“jing”,INDEX(S,T)=()。
第4章习题解答 c++课后习题答案

for (j=1; j<=m; j++)
{
ptr=rtr;
rtr=rtr->Next;
free(ptr);
}
7.编写一个算法,功能是复制一个链串。
答:复制一个完整的链串,是一件比较容易的事情。其算法起名为Copy_Lt(),参数为Lt1。具体编写如下。
Copy_Lt(Lt1)
cij= aij+ bij(1≤i≤m,1≤j≤n)
答:算法名为Add_Mt(),参数为A,B,C。
Add_Mt(A, B, C)
{
for (i=1; i<=m; i++)
for (j=1; j<=n; j++)
C[i][j] = A[i][j] + B[i][j];
}
A.BCDEFB.BCDEFGC.BCPQRSTD.BCDEFEF
4.设有一个8阶的对称矩阵A,采用以行优先的方式压缩存储。a11为第1个元素,其存储地址为1,每个元素占一个地址空间。试问元素a85的地址是A。
A.33B.30C.13D.23
5.一个m*m的对称矩阵,如果以行优先的方式压缩存入内存。那么所需存储区的容量应该是C。
答:按照这样的设计,算法4-2的描述如下。
Equal_St(St1, St2)
{
i=1;
while (St1[i] !=“\0”)/*两串进行比较*/
{
if (St1[i] == St2[i])/*相等,继续比较*/
i++;
else/*不等,强制退出*/
black;
}
if (St1[i] != St2[i])/*比较是由于相应位置上的字符不同而结束*/
数据结构(C语言版)习题及答案第四章

数据结构(C语言版)习题及答案第四章习题4.1选择题1、空串与空格串是(B)。
A、相同B、不相同C、不能确定2、串是一种特殊的线性表,其特殊性体现在(B)。
A、可以顺序存储B、数据元素是一个字符C、可以链式存储D、数据元素可以是多个字符3、设有两个串p和q,求q在p中首次出现的位置的操作是(B)。
A、连接B、模式匹配C、求子串D、求串长4、设串1=“ABCDEFG”,2=“PQRST”函数trconcat(,t)返回和t串的连接串,trub(,i,j)返回串中从第i个字符开始的、由连续j 个字符组成的子串。
trlength()返回串的长度。
则trconcat(trub(1,2,trlength(2)),trub(1,trlength(2),2))的结果串是(D)。
A、BCDEFB、BCDEFGC、BCPQRSTD、BCDEFEF5、若串=“oftware”,其子串个数是(B)。
A、8B、37C、36D、94.2简答题1、简述空串与空格串、主串与子串、串名与串值每对术语的区别?答:空串是指长度为0的串,即没有任何字符的串。
空格串是指由一个或多个空格组成的串,长度不为0。
子串是指由串中任意个连续字符组成的子序列,包含子串的串称为主串。
串名是串的一个名称,不指组成串的字符序列。
串值是指组成串的若干个字符序列,即双引号中的内容。
2、两个字符串相等的充要条件是什么?答:条件一是两个串的长度必须相等条件二是串中各个对应位置上的字符都相等。
3、串有哪几种存储结构?答:有三种存储结构,分别为:顺序存储、链式存储和索引存储。
4、已知两个串:1=”fgcdbcabcadr”,2=”abc”,试求两个串的长度,判断串2是否是串1的子串,并指出串2在串1中的位置。
答:(1)串1的长度为14,串2的长度为3。
(2)串2是串1的子串,在串2中的位置为9。
5、已知:1=〃I’matudent〃,2=〃tudent〃,3=〃teacher〃,试求下列各操作的结果:trlength(1);答:13trconcat(2,3);答:”tudentteachar”trdelub(1,4,10);答:I’m6、设1=”AB”,2=”ABCD”,3=”EFGHIJK,试画出它们在各种存储结构下的结构图。
数据结构课后习题(第4-5章)

【课后习题】第4章 串 第5章 数组和广义表网络工程2010级( )班 学号: 姓名:题 号 一 二 三 四 总分 得 分一、填空题(每空1分,共30分)1. 串有三种机内表示方法: 、 和 ,其中前两种属于顺序存储结构,第三种属于 。
2. 若n 为主串长度,m 为子串长度,则串的BF (朴素)匹配算法最坏的情况下需要比较字符的总次数为 ,T(n)= 。
3. 是任意串的子串;任意串S 都是S 本身的子串,除S 本身外,S 的其他子串称为S 的 。
4. 设数组a[1…50, 1…60]的基地址为1000,每个元素占2个存储单元,若以行序为主序顺序存储,则元素a[32,58]的存储地址为 。
5. 对于数组,比较适于采用 结构够进行存储。
6. 广义表的深度是指_______。
7. 将一个100100 A 的三对角矩阵,按行优先存入一维数组B[297]中,A 中元素66,66A 在B 数组中的位置k 为 。
8. 注意:a i,j 的k 为 2(i-1)+j-1,(i=1时j=1,2;1<i<=n 时,j=i-1,i,i+1) 。
9. 称为空串; 称为空白串。
10. 求串T 在主串S 中首次出现的位置的操作是 ,其中 称为目标串, 称为模式。
11. 对称矩阵的下三角元素a[i,j],存放在一维数组V 的元素V[k]中(下标都是从0开始), 12. k 与i ,j 的关系是:k= 。
13. 在n 维数组中每个元素都受到 个条件的约束。
14. 同一数组中的各元素的长度 。
15. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的 、 和 。
16.稀疏矩阵中有n个非零元素,则其三元组有行。
17.求下列广义表操作的结果:18.(1)GetHead【((a,b),(c,d))】=== ;19.(2)GetHead【GetTail【((a,b),(c,d))】】=== ;20.(3)GetHead【GetTail【GetHead【((a,b),(c,d))】】】=== ;21.(4)GetTail【GetHead【GetTail【((a,b),(c,d))】】】=== ;22.广义表E=(a,(b,E)),则E的长度= ,深度= ;二、判断题(如果正确,在下表对应位置打“√”,否则打“⨯”。
数据结构(c语言版)课后习题答案完整版

第1章 绪论5.选择题:CCBDCA6.试分析下面各程序段的时间复杂度。
.试分析下面各程序段的时间复杂度。
(1)O (1) (2)O (m*n ) (3)O (n 2) (4)O (log 3n )(5)因为x++共执行了n-1+n-2+……+1= n(n-1)/2,所以执行时间为O (n 2) (6)O(n )第2章 线性表1.选择题.选择题babadbcabdcddac 2.算法设计题.算法设计题(6)设计一个算法,通过一趟遍历在单链表中确定值最大的结点。
)设计一个算法,通过一趟遍历在单链表中确定值最大的结点。
ElemType Max (LinkList L ){if(L->next==NULL) return NULL; pmax=L->next; //假定第一个结点中数据具有最大值假定第一个结点中数据具有最大值 p=L->next->next;while(p != NULL ){//如果下一个结点存在if(p->data > pmax->data) pmax=p; p=p->next; }return pmax->data;(7)设计一个算法,通过遍历一趟,将链表中所有结点的链接方向逆转,仍利用原表的存储空间。
的存储空间。
void inverse(LinkList &L) { // 逆置带头结点的单链表 Lp=L->next; L->next=NULL; while ( p) {q=p->next; // q 指向*p 的后继 p->next=L->next;L->next=p; // *p 插入在头结点之后 p = q; }}、空间(n)、空间(10)已知长度为n的线性表A采用顺序存储结构,请写一时间复杂度为O(n)的数据元素。
复杂度为O(1)的算法,该算法删除线性表中所有值为item的数据元素。
第4章 字符串 习题参考答案

第4章串习题参考答案一、基础知识题4.1 简述下列每对术语的区别:空串和空格串;串常量与串变量;主串和子串;串变量的名字和串变量的值;静态分配的顺序串与动态分配的顺序串。
【解答】不含任何字符的串称为空串,其长度为0。
仅含有空格字符的串称为空格串,其长度为串中空格字符的个数。
空格符可用来分割一般的字符,便于人们识别和阅读,但计算串长时应包括这些空格符。
空串在串处理中可作为任意串的子串。
用引号(数据结构教学中通常用单引号,而C语言中用双引号)括起来的字符序列称为串常量,串值可以变化的量称为串变量。
串中任意个连续的字符组成的子序列被称为该串的子串。
包含子串的串又被称为该子串的主串。
子串在主串中第一次出现的第一个字符的位置称子串在主串中的位置。
串变量的与其它变量一样,要用名字引用其值,串变量的名字也是标识符,串变量的值可以修改。
串的存储也有静态存储和动态存储两种。
静态存储指用一维数组,通常一个字符占用一个字节,需要静态定义串的长度,具有顺序存储结构的优缺点。
若需要在程序执行过程中,动态地改变串的长度,则可以利用标准函数malloc()和free()动态地分配或释放存储单元,提高存储资源的利用率。
在C语言中,动态分配和回收的存储单元都来自于一个被称之为“堆”的自由存储区,故该方法可称为堆分配存储。
类型定义如下所示:typedef struct{ char *str;int length;}HString;4.2设有串S=’good’,T=’I︼am︼a︼student’,R=’!’,求:(1)StringConcat(T,R) (2)SubString(T,8,7)(3)StringLength(T) (4)Index(T,’a’)(5)StringInsert(T,8,S)(6)Replace(T,SubString(T,8,7),’teacher’)【解答】(1) StringConcat(T,R)=’I︼am︼a︼student!’(2) SubString(T,8,7)=’student’(3) StringLength(T)=14(4) Index(T,’a’)=3(5) StringInsert(T,8,S)=’I︼am︼a︼goodstudent’(6) Replace(T,SubString(T,8,7),’teacher’)= ’I︼am︼a︼teacher’4.3若串S1=‘ABCDEFG’,S2=‘9898’,S3=‘###’,S4=‘012345’,执行concat(replace(S1,substr(S1,length(S2),length(S3)),S3),substr(S4,index(S2,‘8’),length(S2))) 操作的结果是什么?【解答】concat(replace(S1,substr(S1,length(S2),length(S3)),S3),substr(S4,index(S2,‘8’),length(S2))) = concat(replace(S1,substr(S1,4,3),S3),substr(S4,2,4))= concat(replace(S1,’DEF’,S3),’1234’)= concat(‘ABC###G ’,’1234’)= ‘ABC###G1234’4.4 设S 为一个长度为n 的字符串,其中的字符各不相同,则S 中的互异的非平凡子串(非空且不同于S 本身)的个数是多少?【解答】长度为n 的字符串中互异的非平凡子串(非空且不同于S 本身)的个数计算如下: 长度为1的子串有n 个,长度为2的子串有n-1个,长度为3的子串有n-2个,……,长度为n-1的子串有2个,长度为n 的子串有1个(按题意要求这个子串就是S 本身,不能计算在总数内)。
编译原理第4章作业答案

第四章习题4.2.1:考虑上下文无关文法:S-〉SS+|SS*|a 以及串aa+a* (1)给出这个串的一个最左推导 S-> S S *-> S S + S * -> a S + S * -> a a + S * -aa +a(3)给出这个串的一棵语法分析树习题4.3.1:下面是一个只包含符号a 和b 的正则表达式的文法。
它使用+替代表示并运算的符号|,以避免和文法中作为元符号使用的竖线相混淆:rexpr T rexpr+rterm|rtermrterm —rtermrfactor|rfactorrfactor —rfactor*|rprimaryrprimary —a|b1)对这个文法提取公因子2)提取公因子的变换使这个文法适用于自顶向下的语法分析技术吗? 3)提取公因子之后,原文法中消除左递归4)得到的文法适用于自顶向下的语法分析吗? 解1)提取左公因子之后的文法变为rexpr —rexpr+rterm|rtermrterm —rtermrfactor|rfactorrfactor —rfactor*|rprimaryrprimary —a|b 2)不可以,文法中存在左递归,而自顶向下技术不适合左递归文法 3)消除左递归后的文法rexpr->rtermrexpr'rexpr'->+rtermrexpr'l e rterm->rfactorrterm'rterm'->factorrterm'|erfactor->rprimayrfactor'fact or'-〉*rfactor'|erprimary->a|b4) 该文法无左递归,适合于自顶向下的语法分析习题4.4.1:为下面的每一个文法设计一个预测分析器,并给出预测分析表。
可能要先对文法进行提取左公因子或消除左递归 (3)S-〉S(S)S|*(5)S->(L)|aL->L,S|S 解 (3)①消除该文法的左递归后得到文法S-〉S'S'-〉(S)SS'|*②计算FIRST 和FOLLOW 集合FIRST(S)={(,*}FOLLOW(S)={),$} FIRST(S')={(,*}FOLLOW(S')={),$}③构建预测分析表①消除该文法的左递归得到文法S-〉(L)|a L->SL' L'-〉,SL'|£②计算FIRST 与FOLLOW 集合FIRST(S)={(,a}FOLLOW(S)={),,,$}FIRST(L)={(,a}FOLLOW(L)={)} FIRST(L')={,,£}FOLLOW(L')={)}习题4.4.4计算练习4.2.2的文法的FIRST 和FOLLOW 集合3)S T S(S)S|5) S T (L)|a,L T L,S|S 解:3)FIRST(S)={£,(}FOLLOW(S)={(,),$} 5) FIRST(S)={(,a}FOLLOW(S)={),,,$}FIRST (L )={(,a}FOLLOW (L )={),,}习题4.6.2为练习4.2.1中的增广文法构造SLR 项集,计算这些项集的GOTO 函数,给出这个文法的语法分析表。
第4章 串(习题)

第4章串习题一、选择题1、如下陈述中正确的是()A.串是一种特殊的线性表 B.串的长度必须大于零C.串中元素只能是字母 D.空串就是空白串2、设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为()A.求子串 B.联接 C.匹配 D.求串长3、串”ababaaababaa”的next数组为()。
A.012345678999 B.012121111212 C.011234223456 D.01230123223454、串是_____________。
A.不少于一个字母的序列B.任意个字母的序列C.不少于一个字符的序列D.有限个字符的序列5、串的长度是指()A.串中所含不同字母的个数 B.串中所含字符的个数C.串中所含不同字符的个数 D.串中所含非空格字符的个数二、填空题1、设正文串长度为n,模式串长度为m,则串匹配的KMP算法的时间复杂度为________。
2、一个字符串中________称为该串的子串。
3、串是一种特殊的线性表,其特殊性表现在__ __;串的两种最基本的存储方式是____、__ __;两个串相等的充分必要条件是____ 。
4、INDEX(‘MY STUDENT’,‘STU’)=________。
5、设正文串长度为n,模式串长度为m,则串匹配的KMP算法的时间复杂度为________。
6、设串S的长度为n,则S的子串个数为________7、字符串”mnmnmmmn”的nextval函数值为________。
8、设T和P是两个给定的串,在T中寻找等于P的子串的过程称为__ __,又称P为_ __。
9、下列程序判断字符串s 是否对称,对称则返回1,否则返回0;如 f("abba")返回1,f("abab")返回0;int f(_______){int i=0,j=0;while (s[j])________;for(j--; i<j && s[i]==s[j]; i++,j--);return(_______);}三、判断题1、KMP算法的特点是在模式匹配时指示主串的指针不会变小。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四章串一、选择题1.下面关于串的的叙述中,哪一个是不正确的()(2 分)A.串是字符的有限序列B.空串是由空格构成的串C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储2 若串S=‘ABCDEFG’, S2=‘9898’,S3=‘###’,S4=‘012345’,执行concat(replace(S1,substr(S1,length(S2),length(S3)),S3),substr(S4,index(S2,‘8’),length(S2))) 其结果为()(7 分)<A.ABC###G0123 B.ABCD###2345 C.ABC###G2345 D.ABC###2345E.ABC###G1234 F.ABCD###1234 G.ABC###012343.设有两个串p 和q,其中q 是p 的子串,求q 在p 中首次出现的位置的算法称为()A.求子串B.联接C.匹配D.求串长(2 分)4.已知串S=‘aaab’,其Next 数组值为()。
(2 分)A.0123 B.1123 C.1231 D.12115.串‘ababaaababaa’的next 数组为()。
)A.0 B.012121111212 C.0 D.06.字符串‘ababaabab’的nextval 为()A.(0,1,0,1,04,1,0,1) B.(0,1,0,1,0,2,1,0,1)C.(0,1,0,1,0,0,0,1,1) D.(0,1,0,1,0,1,0,1,1 )(2 分)7.模式串t=‘abcaabbcabcaabdab’,该模式串的next 数组的值为(),nextval 数组的值为()。
A.0 1 1 1 2 2 1 1 1 2 3 4 5 6 7 1 2 B.0 1 1 1 2 1 2 1 1 2 3 4 5 6 1 1 2C.0 1 1 1 0 0 1 3 1 0 1 1 0 0 7 0 1 D.0 1 1 1 2 2 3 1 1 2 3 4 5 6 7 1 2E.0 1 1 0 0 1 1 1 0 1 1 0 0 1 7 0 1 F.0 1 1 0 2 1 3 1 0 1 1 0 2 1 7 0 1,(2 分)8.若串S=’software’,其子串的数目是()。
(2 分)A.8 B.37 C.36 D.99.设S 为一个长度为n 的字符串,其中的字符各不相同,则S 中的互异的非平凡子串(非空且不同于S本身)的个数为()。
A.2n-1 B.n2 C.(n2/2)+(n/2) D.(n2/2)+(n/2)-1 E. (n2/2)-(n/2)-1 F.其他情况10.串的长度是指()(3 分)A.串中所含不同字母的个数B.串中所含字符的个数[C.串中所含不同字符的个数D.串中所含非空格字符的个数二、判断题1.KMP 算法的特点是在模式匹配时指示主串的指针不会变小。
()(1 分)2.设模式串的长度为m,目标串的长度为n,当n≈m 且处理只匹配一次的模式时,朴素的匹配(即子串定位函数)算法所花的时间代价可能会更为节省。
()(1 分)3.串是一种数据对象和操作都特殊的线性表。
()(1 分)%二、填空题1.空格串是指__(1)__,其长度等于___(2)__。
(2 分)2.组成串的数据元素只能是________。
(1 分)3.一个字符串中________称为该串的子串。
(1 分)4.INDEX(‘DATASTRUCTURE’,‘STR’)=________。
(2 分);5.设正文串长度为n,模式串长度为m,则串匹配的KMP 算法的时间复杂度为________。
6.模式串P=‘abaabcac’的next 函数值序列为________。
(2 分)7.字符串’ababaaab’的nextval 函数值为________。
(2 分)8.设T 和P 是两个给定的串,在T 中寻找等于P 的子串的过程称为__(1)__,又称P 为__(2)__。
(16/6 分)9.串是一种特殊的线性表,其特殊性表现在__(1)__;串的两种最基本的存储方式是__(2)__、__(3)__;两个串相等的充分必要条件是__(4)__。
(4 分)`10.两个字符串相等的充分必要条件是_______。
(2 分)11.知U=‘xyxyxyxxyxy’;t=‘xxy’;ASSIGN(S,U);ASSIGN(V,SUBSTR(S,INDEX(s,t),LEN(t)+1));ASSIGN(m,‘ww’)求REPLACE(S,V,m)= ________。
(5 分)12.实现字符串拷贝的函数strcpy 为:void strcpy(char *s , char *t) /*copy t to s*/]{ while (________)} (3 分)13.下列程序判断字符串s 是否对称,对称则返回1,否则返回0;如f("abba")返回1,f("abab")返回0;int f((1)________){int i=0,j=0;while (s[j])(2)________;for(j--; i<j && s[i]==s[j]; i++,j--);return((3)_______)} (3 分)*14.下列算法实现求采用顺序结构存储的串s 和串t 的一个最长公共子串。
程序(a)PROCEDURE maxcomstr(VAR s,t : orderstring; VAR index,length : integer);VAR i,j,k,length1:integer; con:boolean;BEGINindex :=0; length :=0; i :=1;WHILE(i<= DO[j:=1;WHILE (j<= DO;[ IF (s[i]=t[j]) THEN[ k:=1; length1:=1; con:=true;WHILE con DOIF (1)__THEN [length1:=length1+1;k:=k+1;] ELSE(2) _;IF (length1>length) THEN [index:=i; length:=length1; ](3)____;]ELSE (4)____;](5) ___;【]END;程序(b)void maxcomstr(orderstring *s,*t; int index, length){int i,j,k,length1,con;index=0;length=0;i=1;while (i<={j=1;while(j<={ if (s[i]= =t[j])|{ k=1;length1=1;con=1;while(con)if (1) _ { length1=length1+1;k=k+1; } else (2) __;if (length1>length) { index=i; length=length1; }(3)____;}else (4) ___;}(5) __} } (10 分)@15.完善算法:求KMP 算法中next 数组。
PROC get _next(t:string,VAR next:ARRAY[1..] OF integer);BEGINj:=1; k:=(1)__; next[1]:=0;WHILE j< DOIF k=0 OR [j]=[k] THEN BEGIN j:=j+1; k:=k+1; next[j]:=k;ENDELSE k:=(2)___;END;(4 分)&16.下面函数index 用于求t 是否为s 的子串,若是返回t 第一次出现在s 中的序号(从1 开始计),否则返回0。
例如:s=‘abcdefcdek’,t=‘cde’,则indse(s,t)=3, index(s,’aaa’)=0 。
已知t,s 的串长分别是mt,msFUNC index(s,t,ms,mt);i:=1;j:=1;WHILE (i<ms) AND (j<mt) DOIF s[i]=t[j] THEN [ (1)__; (2)__]ELSE [ (3)___; (4)_ ]IF j>mt THEN return (5)____; ELSE return (6)__ENDF;(6 分)%17.阅读下列程序说明和pascal 程序,把应填入其中的()处的字句写在答题纸上。
程序说明:本程序用于判别输入的字符串是否为如下形式的字符串:W&M$ 其中,子字符串M 是子字符串W 的字符反向排列,在此假定W 不含有字符&和字符$,字符&用作W 与M 的分隔符,字符$用作字符串的输入结束符。
例如,对输入字符串ab&ba$、11&12$、ab&dd$、&$,程序将分别输出Ok.(是),No.(不是)。
程序PROGRAM accept(input,output);CONST midch=’&’; endch=’$’;VAR an:boolean; ch:char;PROCEDURE match(VAR answer: boolean);VAR ch1,ch2:char; f:boolean;BEGINread(ch1);"IF ch1<>endchTHEN IF (1)__THEN BEGIN match(f);IF f THEN BEGIN read(ch2); answer:=(2)_ END ELSE answer:=falseENDELSE (3)___ELSE (4)___END;BEGINwriteln(‘Enter String:’);(match(an);IF an THEN BEGIN(5)__ IF (6)_ THEN writeln(‘Ok.’) ELSE writeln(‘No.’)ENDELSE writeln(‘No.’)END. (15 分)18.试利用下列栈和串的基本操作完成下述填空题。
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;&{若给定的表达式的前缀式pre 正确,本过程求得和它相应的表达式exp 并返回“true”,否则exp为空串,并返回“false”。