第4章 串答案
数据结构第四章考试题库(含答案)
第四章串一、选择题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 数组的值为()。
第四、五章串、数组和广义表练习题答案
第四、五章串、数组和广义表练习题答案一.填空题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章串
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选择题1.下面关于串的的叙述中,哪一个是不正确的?()A)串是字符的有限序列B)空串是由空格构成的串C)模式匹配是串的一种重要运算D)串既可以采用顺序存储,也可以采用链式存储【答案】B【解析】空串是不含任何字符的串,即空串的长度是零。
空格串是由空格组成的串,其长度等于空格的个数。
2.设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为()A)求子串B)联接C)匹配D)求串长【答案】C3.若串s="software",其子串个数是()A)8 B)37 C)36 D)9【答案】C【解析】s的长度为8,长度为8的子串有1个,长度为7的子串有2个,长度为6的子串有3个,长度为5的子串有4个,…,长度为1的子串有8个,共有(1+8)*8/2=36个。
4.串的长度是指()A)串中所含不同字母的个数B)串中所含字符的个数C)串中所含不同字符的个数D)串中所含非空格字符的个数【答案】B5.若串S1="ABCDEFG",S2="9898",S3="###",S4="012345",则执行concat(replace(S1,substr(S1,length(S2),length(S3)),S3),substr(S4,index(S2, '8'),length(S2)))其结果为()A)ABC###G0123 B)ABCD###2345C)ABC###G2345 D)ABC###G1234【答案】D【解析】函数concat(x,y)返回x和y的连接串,substr(s,i,j)返回串s的从序号i的字符开始的j个字符组成的子串,length(s)返回串s的长度。
replase(s,t,v)用v替换s中出现的所有与t相等的子串,index(s,t,i)当s中存在与t值相同的子串时,返回它在s中的第i个字符之后第一次出现的位置。
串-第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.函数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.空串是只含有空格字符的串C.空串是含有零个字符或含有空格字符的串D.串是含有一个或多个字符的有穷序列5.下面关于串的的叙述中,哪一个是不正确的?()A.串是字符的有限序列 B.空串是由空格构成的串C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储6.设有两个串S1和S2,求S2在S1中首次出现的位置的运算称作( ) A.求子串 B.判断是否相等 C.模型匹配 D.连接7.若串S=’software’,其子串的数目是( )。
A.8 B.37 C.36 D.98.串的长度是指()A.串中所含不同字母的个数 B.串中所含字符的个数C.串中所含不同字符的个数 D.串中所含非空格字符的个数9.串是一种特殊的线性表,其特殊性体现在( )。
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)A.串是字符的有限序列B.空串是由空格构成的串C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储二、填空题1.两个串是相等的,当且仅当两个串的长度相等且___对应位置_____的字符都相同。
第4章《串》
第四章《串》一、选择题1.下面关于串的的叙述中,哪一个是不正确的?()【北方交通大学2001 一、5(2分)】A.串是字符的有限序列B.空串是由空格构成的串C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储【参考答案】B2 若串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.AB C###G0123 B.ABCD###2345 C.ABC###G2345 D.ABC###2345E.ABC###G1234 F.ABCD###1234 G.ABC###01234【参考答案】E3.设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为()【北京邮电大学2000 二、4(20/8分)】【西安电子科技大学1996 一、1 (2分)】A.求子串B.联接C.匹配D.求串长【参考答案】C4.已知串S=‘aaab’,其Next数组值为()。
【西安电子科技大学1996 一、7 (2分)】A.0123 B.1123 C.1231 D.1211【参考答案】A5.串‘ababaaababaa’的next数组为()。
【中山大学1999 一、7】A.012345678999 B.012121111212 C.011234223456 D.0123012322345【参考答案】C6.字符串‘ababaabab’ 的nextval 为()【北京邮电大学1999 一、1(2分)】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)【参考答案】A7.模式串t=‘abcaabbcabcaabdab’,该模式串的next数组的值为(),nextval数组的值为()。
数据结构第四章串习题及答案
习题四串一、单项选择题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.B2. B3.B4.C5. C二、填空题1.空、字符2.由空格字符(ASCII值32)所组成的字符串空格个数3.长度、相等、子、主4.55.011223126.(1)char s[ ] (2) j++ (3) i >= j7.[题目分析]本题算法采用顺序存储结构求串s和串t的最大公共子串。
第4章串答案.doc
一、选择题1如下陈述中正确的是(A).A.串是一种特殊的线性表B串的长度必须大于0C串中元素只能是字母D空串就是空格串2串的长度是指(B).A串中所有不同字母的个数B串中所有字符的个数c.串中所含不同字符的个数D串中所有非空格字符的个数3设有两个串p和q,求q在p中首次出现的位置的运算称作(B )oA连接B模式匹配C求子串D求串长4.( D )是(2语言中"abed 321ABCD "的子串.A. abedB. 321ABC. "abcABC"D. "21AB "5若串s=n sofrware n ,其子串的数目是(B37).A. 8B. 37C. 36D. 96下而关于串的叙述中,哪个是不正确的?( B ).A串是字符的有限序列B空串是由空格构成的串C模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以釆用链式存储7.设串S=n abcdefgh", S的所有非平凡子串的个数是(C )A. 8B. 37C. 36D. 358.设S为一个长度为n的字符串,其中的字符各不相同,s中的互异的非平凡子串的个数是(C)A.川B. % + % —1C. % + %D. % —% —19.设主串的长度为m,模式串的长度是n,串匹配的B算法时间复杂度是(D )A.o(n2)B・o(〃)C・ o(〃 + nt)D・o(m*n)10•顺序串中,根据空间分配方式的不同,可分为(B)A.直接分配和间接分配B.静态分配和动态分配C.顺序分配和链式分配D.随机分配和固定分配二、基本知识题1空串与空格串有何区别?空串是指长度是零的串,空格串中可以包含一个或多个空白符2己知有两个串为A= n ac cab cabcbbca"B="abc"判断B串是否是A串的子串,如果是其子串,说明起始点是A 串的第几个字符。
是93.串是一种特殊的线性表,其特殊性体现在什么地方?数据元素是一个字符4串的两种基本的存储方式是什么?顺序和链接5两个串相等的充分必要条件是什么?串长相等且对应位置的字符相同三、算法设计题1对于采用顺序结构有储的串r,编写一个函数删除其值等于ch 的所有字符.2对于采用顺序结构有储的串r,编写一个函数删除r中第i个字符开始的j个字符.3对于采用顺序结构有储的串r,设计一算法将串逆置.4采用单链表结构存储的串r ,编写一个函数将其中所有的'c,宇符替挟成's,宇符.5己如两个采用单链表结构存储的串A和 B o试编写个函数将串B插入串A中第k个字符之后。
算法与数据结构考研试题精析(第二版)第4章串答案概要
第四章串一、选择题1.B 2.E 3.C 4.A5.C6.A7.1D 7.2F 8.B注9.D 10.B注:子串的定义是:串中随意个连续的字符构成的子序列,并规定空串是随意串的子串,随意串是其自己的子串。
若字符串长度为n(n>0),长为n的子串有1个,长为n-1的子串有2个,长为n-2的子串有3个,,,,长为1的子串有n个。
因为空串是任何串的子串,所以此题的答案为:8*(8+1)/2+1=37。
应选B。
但某些教科书上以为“空串是随意串的子串”无心义,所以以为选C。
为防止考试中的二意性,编者以为第9题出得好。
二、判断题1.√2.√3.√三.填空题1.(1)由空格字符(ASCII值32)所构成的字符串(2)空格个数23.随意个连续的字符构成的子序列4.5 5.O(m+n) 6.011223127.010104218.(1)模式般配(2)模式串.字符9.(1)其数据元素都是字符(2)次序储存(3)和链式储存(4)串的长度相等且两串中对应地点的字符也相等10.两串的长度相等且两串中对应地点的字符也相等。
11.’xyxyxywwy’12.*s++=*t++或(*s++=*t++)!=‘\0’13.(1)chars[] (2)j++ (3)i>=j14.[题目剖析]此题算法采纳次序储存构造求串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),则最长公共子串的长度要改正。
《数据结构及其应用》笔记含答案 第四章_串、数组和广义表
第4章串、数组和广义表一、填空题1、零个或多个字符组成的有限序列称为串。
二、判断题1、稀疏矩阵压缩存储后,必会失去随机存取功能。
(√)2、数组是线性结构的一种推广,因此与线性表一样,可以对它进行插入,删除等操作。
(╳)3、若采用三元组存储稀疏矩阵,把每个元素的行下标和列下标互换,就完成了对该矩阵的转置运算。
(╳)4、若一个广义表的表头为空表,则此广义表亦为空表。
(╳)5、所谓取广义表的表尾就是返回广义表中最后一个元素。
(╳)三、单项选择题1、串是一种特殊的线性表,其特殊性体现在(B)。
A.可以顺序存储B.数据元素是一个字符C.可以链式存储D.数据元素可以是多个字符若2、串下面关于串的的叙述中,(B)是不正确的?A.串是字符的有限序列B.空串是由空格构成的串C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储解释:空格常常是串的字符集合中的一个元素,有一个或多个空格组成的串成为空格串,零个字符的串成为空串,其长度为零。
3、串“ababaaababaa”的next数组为(C)。
A.012345678999 B.012121111212 C.011234223456 D.01230123223454、串“ababaabab”的nextval为(A)。
A.010104101B.010102101 C.010100011 D.0101010115、串的长度是指(B)。
A.串中所含不同字母的个数B.串中所含字符的个数C.串中所含不同字符的个数D.串中所含非空格字符的个数解释:串中字符的数目称为串的长度。
6、假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存储单元,基地址为10,则LOC[5,5]=(B)。
A.808 B.818 C.1010 D.1020解释:以行序为主,则LOC[5,5]=[(5-1)*100+(5-1)]*2+10=818。
第4章 串
一、选择题1.若串S=‘software’,其子串的数目是。
A.8 B.37 C.36 D.92.串的长度是指。
A.串中所含不同字母的个数 B.串中所含字符的个数C.串中所含不同字符的个数 D.串中所含非空格字符的个数3.串是一种特殊的线性表,其特殊性体现在。
A.可以顺序存储 B.数据元素是一个字符C.可以链式存储 D.数据元素可以是多个字符4.设有两个串p和q,求q在p中首次出现的位置的运算称为。
A.连接 B.模式匹配 C.求子串 D.求串长二、填空题1.空串是,其长度等于。
空格串是,其长度等于。
2.组成串的数据元素只能是。
3.一个字符串中称为该串的子串。
4.子串”str”在主串”datastructure”中的位置是。
5. 子串的定位运算称为;被匹配的主串称为,子串称为。
4.1 简述下列每对术语的区别:空串和空格串;串常量和串变量;主串和子串;静态分配的顺序串和动态分配的顺序串(即:定长顺序存储和堆分配存储);目标串和模式串。
4.2 假设有如下的串说明:char s1[30]="Stocktom,CA", s2[30]="March 5 1999", s3[30], *p;(1)在执行如下的每个语句后p的值是什么?p=strchr(s1,'t'); p=strchr(s2,'9'); p=strchr(s2,'6');(2)在执行下列语句后,s3的值是什么?strcpy(s3,s1); strcat(s3,","); strcat(s3,s2);(3)调用函数strcmp(s1,s2)的返回值是什么?(4)调用函数strcmp(&s1[5],"ton")的返回值是什么?(5)调用函数strlen(strcat(s1,s2))的返回值是什么?4.3和4.4 二选一:*4.3利用C的库函数strlen,strcpy和strcat写一算法voidStrInsert(char *S, char *T, int i),将串T插入到串S的第i个位置上。
数据结构课后习题(第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的长度= ,深度= ;二、判断题(如果正确,在下表对应位置打“√”,否则打“⨯”。
第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 本身,不能计算在总数内)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四章答案
4.1 设s=’I AM A STUDENT’,t=’GOOD’,q=’WORKER’。
给出下列操作的结果:
【解答】StrLength(s)=14;
SubString(sub1,s,1,7) sub1=’I AM A ’;
SubString(sub2,s,7,1) sub2=’ ’;
StrIndex(s,4,’A’)=6;
StrReplace(s,’STUDENT’,q); s=’I AM A WORKER’;
StrCat(StrCat(sub1,t),StrCat(sub2,q)) sub1=’I AM A GOOD WORKER’。
4.2编写算法,实现串的基本操作StrReplace(S,T,V)。
【解答】算法如下:
int strReplace(SString S,SString T, SString V)
{/*用串V替换S中的所有子串T */
int pos,i;
pos=strIndex(S,1,T); /*求S中子串T第一次出现的位置*/
if(pos = = 0) return(0);
while(pos!=0) /*用串V替换S中的所有子串T */
{
switch(T.len-V.len)
{
case 0: /*串T的长度等于串V的长度*/ for(i=0;i<=V.len;i++) /*用V替换T*/
S->ch[pos+i]=V.ch[i];
case >0: /*串T的长度大于串V的长度*/ for(i=pos+t.ien;i<S->len;i--) /*将S中子串T后的所有字符
S->ch[i-t.len+v.len]=S->ch[i]; 前移T.len-V.len个位置*/ for(i=0;i<=V.len;i++) /*用V替换T*/
S->ch[pos+i]=V.ch[i];
S->len=S->len-T.len+V.len;
case <0: /*串T的长度小于串V的长度*/ if(S->len-T.len+V.len)<= MAXLEN /*插入后串长小于MAXLEN*/
{ /*将S中子串T后的所有字符后移V.len-T.len个位置*/
for(i=S->len-T.len+V.len;i>=pos+T.len;i--)
S->ch[i]=S->ch[i-T.len+V.len];
for(i=0;i<=V.len;i++) /*用V替换T*/
S->ch[pos+i]=V.ch[i];
S->len=S->len-T.len+V.len; }
else
{ /*替换后串长>MAXLEN,但串V可以全部替换*/
if(pos+V.len<=MAXLEN)
{ for(i=MAXLEN-1;i>=pos+T.len; i--)
S->ch[i]=s->ch[i-T.len+V.len]
for(i=0;i<=V.len;i++) /*用V替换T*/
S->ch[pos+i]=V.ch[i];
S->len=MAXLEN;}
else /*串V的部分字符要舍弃*/
{ for(i=0;i<MAXLEN-pos;i++)
S->ch[i+pos]=V.ch[i];
S->len=MAXLEN;}
}/*switch()*/
pos=StrIndex(S,pos+V.len,T); /*求S中下一个子串T的位置*/ }/*while()*/
return(1);
}/*StrReplace()*/
附加题:用链式结构实现定位函数。
【解答】
typedef struct Node
{ char data;
struct Node *next;
}Node,*Lstring;
int strIndex(Lstring S, int pos, Lstring T)
/*从串S的pos序号起,串T第一次出现的位置*/
{
Node *p, *q, *Ppos;
int i=0,,j=0;
if(T->next= =NULL || S->next = =NULL) return(0);
p=S->next;
q=T->next;
while(p!=NULL && j<pos) /*p指向串S中第pos个字符*/
{p=p->next; j++;}
if(j!=pos) return(0);
while(p!=NULL && q!=NULL)
{
Ppos=p; /*Ppos指向当前匹配的起始字符*/
if(p->data = = q->data)
{p=p->next; q=q->next;}
else /*从Ppos指向字符的下一个字符起从新匹配*/
{p=Ppos->next;
q=T->head->next;
i++;}
}
if(q= =NULL) return(pos+i); /*匹配成功*/
else return(0); /*失败*/
}。