第四章串习题_数据结构

合集下载

数据结构第四章考试题库(含答案)

数据结构第四章考试题库(含答案)

第四章串一、选择题1.下面关于串的的叙述中,哪一个是不正确的()【北方交通大学 2001 一、5(2分)】A.串是字符的有限序列 B.空串是由空格构成的串C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储2 若串S1=‘ABCDEFG’, S2=‘9898’ ,S3=‘###’,S4=‘012345’,执行concat(replace(S1,substr(S1,length(S2),length(S3)),S3),substr(S4,index (S2,‘8’),length(S2)))其结果为()【北方交通大学 1999 一、5 (25/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.求串长【北京邮电大学 2000 二、4(20/8分)】【西安电子科技大学 1996 一、1 (2分)】4.已知串S=‘aaab’,其Next数组值为()。

【西安电子科技大学 1996 一、7 (2分)】A.0123 B.1123 C.1231 D.12115.串‘ababaaababaa’的next数组为()。

【中山大学 1999 一、7】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 )【北京邮电大学 1999 一、1(2分)】7.模式串t=‘abcaabbcabcaabdab’,该模式串的next数组的值为(),nextval 数组的值为()。

数据结构习题4串

数据结构习题4串

习题4 串4.1 单项选择题1.以下叙述中正确的是。

A.串是一种特殊的线性表B.串的长度必须大于零C.串中无素只能是字母D.空串就是空白串2.空串与空格串是相同的,这种说法____。

A. 正确B. 不正确3.串是一种特殊的线性表,其特殊性体现在____。

A. 可以顺序存储B. 数据元素是一个字符C. 可以链接存储D. 数据元素可以是多个字符4.设有两个串p和q,求q在p中首次出现的位置的运算称作____。

A. 连接B. 模式匹配C. 求子串D. 求串长5.设串s1='ABCDEFG',s2='PQRST',函数con (x,y)返回x和y串的连接串,subs(s,i,j)返回串s的从序号i(从1开始编号)的字符开始的j个字符组成的子串,len(s)返回串s的长度,则con (subs (s1,2,len (s2)), subs (s1,len (s2),2))的结果串是____。

A. BCDEFB. BCDEFGC. BCPQRSTD. BCDEFEF6.设串的长度为n,则它的子串个数为。

A.nB.n(n+1)C.n(n+1)/2D.n(n+1)/2+14.2 填空题(将正确的答案填在相应的空中)1.串的两种最基本的存储方式是________。

2.两个串相等的充分必要条件是________。

3.空串是________,其长度等于________。

4.空格串是________,其长度等于________。

5.设串s='I︺AM︺A︺TEACHER', ︺表示空格,则s的长度是________。

4.3 判断题1.子串定位函数的时间复杂度在最坏情况下为O(n*m),因此子串定位函数没有实际使用的价值。

()2.KMP算法的最大特点是指主串的指针不需要回溯。

()3.如果一个串中的所有字符均在另一串中出现,则说前者是后者的子串。

()4.4 算法设计题1.编写算法,从串s 中删除所有和串 t相同的子串。

数据结构教程李春葆课后答案第4章串

数据结构教程李春葆课后答案第4章串

8. 采用顺序结构存储串,设计一个实现串通配符匹配的算法 pattern_index(),其中的 通配符只有‘?’ ,它可以和任一个字符匹配成功。例如,pattern_index("?re","there are") 返回的结果是 2。 解:采用 BF 算法的穷举法的思路,只需要增加对‘?’字符的处理功能。对应的算法 如下:
void maxsubstr(SqString s,SqString &t) { int maxi=0,maxlen=0,len,i,j,k; i=0; while (i<s.length) //从下标为 i 的字符开始 { j=i+1; //从 i 的下一个位置开始找重复子串 while (j<s.length) { if (s.data[i]==s.data[j]) //找一个子串,其起始下标为 i,长度为 len { len=1; for(k=1;s.data[i+k]==s.data[j+k];k++) len++; if (len>maxlen) //将较大长度者赋给 maxi 与 maxlen { maxi=i; maxlen=len; } j+=len; } else j++; } i++; //继续扫描第 i 字符之后的字符 } t.length=maxlen; //将最长重复子串赋给 t for (i=0;i<maxlen;i++) t.data[i]=s.data[maxi+i]; }
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; }

李春葆《数据结构教程》(第4版)课后习题-串(圣才出品)

李春葆《数据结构教程》(第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。

数据结构第4章习题.docx

数据结构第4章习题.docx

第4章习题解答一、填空1.字符串是一种特殊的线性表,特殊在于它的数据元素只能是一字符,特殊在于串可以作为一个__________ 参与所需要的处理。

2.空格串是由___ 组成的串,空串是_________ 的串,因此空格串和空串不是一个概念。

3.字符串中任意多个_______ 字符所组成的子序列,被称作是这个串的“子串”,这个字符串木身则称为“主串”。

4.我们说两个字符串相等,在计算机内部实际上是通过对相应位置上字符__________ 码的比较而得到的结论。

5.设有串s=<t I am a teacher"。

该串的长度是_________ 。

6.设有三个串:sl=“Good", s2=9', s3=“bye!''。

则si、s2、s3连接后的结果串应该是7.所谓“数组”,是指〃(H>1)个具有」业L类型的数据的有序集合。

8.矩阵与通常所说的[维数组冇关。

9.所谓“特殊矩阵”,是指那些元素在矩阵小的分布具有一定规律性的矩阵;而矩阵小的零元素个数远远多于非零元素的个数,但非零元素的分布却没有规律,这样的矩阵被称为“稀疏矩阵”。

10.在一个阶方阵A中,若所有元素都有性质:= n),就称其为对称矩阵。

二、选择1 •设有两个串si和s20求s2在si中首次出现的位置的操作称为__________ oA.连接B.模式匹配C.求了串D.求串长2・有串:“①",那么它的长度是____ oA. 0B. 1C. 2D. 33.设有串sl=“ABCDEFG'和s2=“PQRSF'。

已知:算法con(x, y)返回串x和y的连接串;subs(s, i, j)返回串s的第i个字符开始往后j个字符组成的子串;len(s)返回串s的长度。

那么,con(subs(sl, 2, len(s2)), subs(sl, len(s2), 2))的操作结果是串__________ 。

(完整word版)数据结构 第四章(串) 考试题目(word文档良心出品)

(完整word版)数据结构 第四章(串) 考试题目(word文档良心出品)

第四章串一单项选择题:1.下列那些为空串()A)S=“ ” B)S=“”C)S=“φ” D)S=“θ”2.S1=“ABCD”,S2=“CD”则S2在S3中的位置是()A)1 B)2 C)3D)43.假设S=“abcaabcaaabca”,T=“bca”,Index (S,T,3) 的结果是()A)2 B)6 C)11 D)04.在串中,对于SubString(&Sub,S,pos,len)基本操作,pos和len的约束条件是()A)0<pos<StrLength(S)+1且1<=len<=StrLength(S)-pos+1B)0<pos<StrLength(S)+1且0<=len<=StrLength(S)-pos-1C)1<=pos<=StrLength(S) 且0<=len<=StrLength(S)-pos+1D)1<=pos<=StrLength(S) 且1<=len<=StrLength(S)-pos-15. 串是一种特殊的线性表,其特殊性体现在( )。

A.可以顺序存储B. 数据元素是一个字符C.可以链接存储D. 数据元素可以是多个字符6. 串是( )。

A.少于一个字母的序列B. 任意个字母的序列C.不少于一个字符的序列D. 有限个字符的序列7. 串的长度是( )。

A.串中不同字母的个数B. 串中不同字符的个数C.串中所含的字符的个数D. 串中所含字符的个数,且大于08. 设有S1=‘ABCDEFG’,S2=‘PQRST’,函数con(x,y)返回x和y串的连接串,subs(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. BCDEFEF9. 若某串的长度小于一个常数,则采用( )存储方式最为节省空间。

《数据结构与算法》第四章-学习指导材料

《数据结构与算法》第四章-学习指导材料

《数据结构与算法》第四章串知识点及例题精选串(即字符串)是一种特殊的线性表,它的数据元素仅由一个字符组成。

4.1 串及其基本运算4.1.1 串的基本概念1.串的定义串是由零个或多个任意字符组成的字符序列。

一般记作:s="s1 s2 … s n""其中s 是串名;在本书中,用双引号作为串的定界符,引号引起来的字符序列为串值,引号本身不属于串的内容;a i(1<=i<=n)是一个任意字符,它称为串的元素,是构成串的基本单位,i是它在整个串中的序号; n为串的长度,表示串中所包含的字符个数,当n=0时,称为空串,通常记为Ф。

2.几个术语子串与主串:串中任意连续的字符组成的子序列称为该串的子串。

包含子串的串相应地称为主串。

子串的位置:子串的第一个字符在主串中的序号称为子串的位置。

串相等:称两个串是相等的,是指两个串的长度相等且对应字符都相等。

4.2 串的定长顺序存储及基本运算因为串是数据元素类型为字符型的线性表,所以线性表的存储方式仍适用于串,也因为字符的特殊性和字符串经常作为一个整体来处理的特点,串在存储时还有一些与一般线性表不同之处。

4.2.1 串的定长顺序存储类似于顺序表,用一组地址连续的存储单元存储串值中的字符序列,所谓定长是指按预定义的大小,为每一个串变量分配一个固定长度的存储区,如:#define MAXSIZE 256char s[MAXSIZE];则串的最大长度不能超过256。

如何标识实际长度?1. 类似顺序表,用一个指针来指向最后一个字符,这样表示的串描述如下:typedef struct{ char data[MAXSIZE];int curlen;} SeqString;定义一个串变量:SeqString s;这种存储方式可以直接得到串的长度:s.curlen+1。

如图4.1所示。

s.dataMAXSIZE-1图4.1 串的顺序存储方式12. 在串尾存储一个不会在串中出现的特殊字符作为串的终结符,以此表示串的结尾。

数据结构第四章串习题及答案

数据结构第四章串习题及答案

习题四串一、单项选择题‎1.下面关于串‎的的叙述中‎,哪一个是不‎正确的?()A.串是字符的‎有限序列 B.空串是由空‎格构成的串‎C.模式匹配是‎串的一种重‎要运算 D.串既可以采‎用顺序存储‎,也可以采用‎链式存储2.串是一种特‎殊的线性表‎,其特殊性体‎现在()。

A.可以顺序存‎储 B.数据元素是‎一个字符C.可以链接存‎储 D.数据元素可‎以是多个字‎符3.串的长度是‎指()A.串中所含不‎同字母的个‎数 B.串中所含字‎符的个数C.串中所含不‎同字符的个‎数 D.串中所含非‎空格字符的‎个数4.设有两个串‎p和q,其中q是p‎的子串,求q在p中‎首次出现的‎位置的算法‎称为()A.求子串 B.联接 C.匹配 D.求串长5.若串S=“softw‎a re”,其子串的个‎数是()。

A.8 B.37 C.36 D.9二、填空题1.含零个字符‎的串称为_‎_____‎串。

任何串中所‎含____‎__的个数‎称为该串的‎长度。

2.空格串是指‎__ __,其长度等于‎__ __。

3.当且仅当两‎个串的__‎____相‎等并且各个‎对应位置上‎的字符都_‎_____‎时,这两个串相‎等。

一个串中任‎意个连续字‎符组成的序‎列称为该串‎的____‎__串,该串称为它‎所有子串的‎_____‎_串。

4.INDEX‎(‘DATAS‎T RUCT‎U RE’,‘STR’)=_____‎___。

5.模式串P=‘abaab‎c ac’的next‎函数值序列‎为____‎____。

6.下列程序判‎断字符串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--);retur‎n((3)___ ____)}7.下列算法实‎现求采用顺‎序结构存储‎的串s和串‎t的一个最‎长公共子串‎。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

习题四串一、单项选择题1.下面关于串的的叙述中,哪一个是不正确的?()A.串是字符的有限序列 B.空串是由空格构成的串C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储2.串是一种特殊的线性表,其特殊性体现在()。

A.可以顺序存储 B.数据元素是一个字符C.可以链接存储 D.数据元素可以是多个字符3.串的长度是指()A.串中所含不同字母的个数 B.串中所含字符的个数C.串中所含不同字符的个数 D.串中所含非空格字符的个数4.设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为()A.求子串 B.联接 C.匹配 D.求串长5.若串S=“software”,其子串的个数是()。

A.8 B.37 C.36 D.9二、填空题1.含零个字符的串称为______串。

任何串中所含______的个数称为该串的长度。

2.空格串是指__ __,其长度等于__ __。

3.当且仅当两个串的______相等并且各个对应位置上的字符都______时,这两个串相等。

一个串中任意个连续字符组成的序列称为该串的______串,该串称为它所有子串的______串。

4.INDEX(‘DATASTRUCTURE’,‘STR’)=________。

5.模式串P=‘abaabcac’的next函数值序列为________。

6.下列程序判断字符串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)___ ____)}7.下列算法实现求采用顺序结构存储的串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(j<=t.len){ 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) __} }三、应用题1.描述以下概念的区别:空格串与空串。

2.设有 A=””,B="mule",C="old",D="my",试计算下列运算的结果(注:A+B是CONCAT (A,B)的简写,A=" "的 " "含有两个空格)。

(a) A+B(b) B+A(c) D+C+B(d) SUBSTR(B,3,2)(e) SUBSTR(C,1,0)(f) LENGTH(A)(g) LENGTH(D)(h) INDEX(B,D)(i) INDEX(C,"d")(j) INSERT(D,2,C)(k) INSERT(B,1,A)(l) DELETE(B,2,2)(m) DELETE(B,2,0)3.设主串S=‘xxyxxxyxxxxyxyx’,模式串T=‘xxyxy’。

请问:如何用最少的比较次数找到T在S中出现的位置?相应的比较次数是多少?4.给出字符串‘abacabaaad’在KMP算法中的next和nextval数组。

5.已知:s =“(xyz)+*”,t =“(x+z)*y”。

试利用联结、求子串和置换等基本运算,将 s 转化为 t 。

四、算法设计题1.在顺序串上实现串的判等运算EQUAL(S,T)。

2.在链串上实现判等运算EQUAL(S,T)。

3.若S和T是用结点大小为1的单链表存储的两个串(S、T为头指针),设计一个算法将串S中首次与串T匹配的子串逆值。

4.以顺序存储结构表示串,设计算法。

求串S中出现的第一个最长重复子串及其位置并分析算法的时间复杂度。

(如果字符串的一个子串(其长度大于1)的各个字符均相同,则称之为等值子串。

如果输入字符串S,以“!”作为结束标志。

串S中不存在等值子串,则输出信息“无等值子串”,否则求出(输出)一个长度最大的等值子串。

例如:若S=“abc123abc123!”,则输出“无等值子串”;若S=“abceebccadddddaaadd!”,则输出“ddddd”。

)5.写一个递归算法来实现字符串逆序存储,要求不另设串存储空间。

第四章串一、单项选择题1.B2. B3.B4.C5. C二、填空题1.空、字符2.由空格字符(ASCII值32)所组成的字符串空格个数3.长度、相等、子、主4.55.6.(1)char s[ ] (2) j++ (3) i >= j7.[题目分析]本题算法采用顺序存储结构求串s和串t的最大公共子串。

串s用i指针(1<=i<=s.len)。

t串用j指针(1<=j<=t.len)。

算法思想是对每个i(1<=i<=s.len,即程序中第一个WHILE循环),来求从i开始的连续字符串与从j(1<=j<=t.len,即程序中第二个WHILE循环)开始的连续字符串的最大匹配。

程序中第三个(即最内层)的WHILE循环,是当s中某字符(s[i])与t中某字符(t[j])相等时,求出局部公共子串。

若该子串长度大于已求出的最长公共子串(初始为0),则最长公共子串的长度要修改。

(1) i+k<=s.len && j+k<=t.len && s[i+k]==t[j+k] //所有注释同上(a)(2) con=0 (3) j+=k (4) j++ (5) i++三、应用题1.空格是一个字符,其ASCII码值是32。

空格串是由空格组成的串,其长度等于空格的个数。

空串是不含任何字符的串,即空串的长度是零。

2.(a)A+B “ mule”(b)B+A “mule ”(c)D+C+B “myoldmule”(d)SUBSTR(B,3,2) “le”(e)SUBSTR(C,1,0) “”(f)LENGTH(A) 2(g)LENGTH(D) 2(h)INDEX(B,D) 0(i)INDEX(C,”d”) 3(j)INSERT(D,2,C) “myold”(k)INSERT(B,1,A) “m ule”(l)DELETE(B,2,2) “me”(m)DELETE(B,2,0) “mule”3.朴素的模式匹配(Brute-Force)时间复杂度是O(m*n),KMP算法有一定改进,时间复杂度达到O(m+n)。

本题也可采用从后面匹配的方法,即从右向左扫描,比较6次成功。

另一种匹配方式是从左往右扫描,但是先比较模式串的最后一个字符,若不等,则模式串后移;若相等,再比较模式串的第一个字符,若第一个字符也相等,则从模式串的第二个字符开始,向右比较,直至相等或失败。

若失败,模式串后移,再重复以上过程。

按这种方法,本题比较18次成功。

4.next和nextval值分别为和。

5.题中所给操作的含义如下://:连接函数,将两个串连接成一个串substr(s,i,j):取子串函数,从串s的第i个字符开始,取连续j个字符形成子串replace(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=s5//s4//s1 //形成串t即‘(x+z)*y’四、算法设计题1.const maxlen=串的最大长度;typedef struct{char ch [maxlen];int curlen;} string;int EQUAL_string(string s,string t ){ if (s.curlen!=t.curlen) return(0);for (t=0; t<s.curlen; t++)if (s.ch[t]!=t.ch[t] ) return(0);return(1);}2.设单链表无头结点const nodesize =用户定义的结点大小;typedef struct node *pointer;struct node{char ch;pointer next;}typedef pointer strlist;int EQULA_strlist(strlist s ,strlist t ){ while ((s!= null )&&(t!=null)&&(s->ch==t->ch)){s=s->next;t=t->next;}return((t= = null)&&(s= =null));}3.分析:首先判断串T是否为串S的子串,若串T是串S的子串对S中该子串逆置。

Int NZ_strlist (strlist s,strlist t){p=s->next;t=t->next;q=s;while(p!=null){pp =p ; tt =t; /*判断串T是否为串S的子串*/while ((tt!=null)&&(pp!=null)&&(pp->ch= =tt->ch)){pp=pp->next;tt=tt->next;}if (tt==null) /*串T是串S的子串对S中的该子串的位置*/{qq=q->next; /* q是子串的第一个结点前趋pp是子串最后一个结点后继*/while(qq!=pp){g=qq; qq= qq->next;q->next =pp; pp=g;}q->next=pp; /*将该子串的前趋与逆置后的子串的相连*/return(1);/*找到并逆置返1 */}else {q=p;p=p->next;}}return(0);/*找不到匹配的串返0*/}4.[题目分析]设以字符数组s表示串,重复子串的含义是由一个或多个连续相等的字符组成的子串,其长度用max表示,初始长度为0,将每个局部重复子串的长度与max相比,若比max大,则需要更新max,并用index记住其开始位置。

相关文档
最新文档