4章串
习题
一、 选择题
1、如下陈述中正确的是(   
A.串是一种特殊的线性表        B.串的长度必须大于零
C.串中元素只能是字母          D.空串就是空白串
2设有两个串pq,其中qp的子串,求qp中首次出现的位置的算法称为(   
A.求子串      B.联接      C.匹配        D.求串长
3、串ababaaababaanext数组为(    )。
A012345678999  B012121111212  C011234223456    D0123012322345
4、串是_____________
A.不少于一个字母的序列  B.任意个字母的序列
C.不少于一个字符的序列  D.有限个字符的序列
5、串的长度是指(   
A.串中所含不同字母的个数      B.串中所含字符的个数
C.串中所含不同字符的个数      D.串中所含非空格字符的个数
二、填空题
1、设正文串长度为n,模式串长度为m,则串匹配的KMP算法的时间复杂度为________。。
2、一个字符串中________称为该串的子串
3、串是一种特殊的线性表,其特殊性表现在__ __;串的两种最基本的存储方式是______ __;两个串相等的充分必要条件是____
4INDEX(‘MY STUDENT’, STU’)=________
5、设正文串长度为n,模式串长度为m,则串匹配的KMP算法的时间复杂度为________
6设串S的长度为n,则S的子串个数为________
7、字符串mnmnmmmnnextval函数值为________
8、设TP是两个给定的串,在T中寻等于P的子串的过程称为__ __,又称P_ __
9下列程序判断字符串s 是否对称,对称则返回1,否则返回0;如 f("abba")返回1f("abab")返回0     
int f(_______)
    {int  i=0,j=0;
      while (s[j])________;字符串长度的正确表示
      for(j--; i<j  && s[i]==s[j]; i++,j--);
      return(_______);
    } 
三、 判断题
1KMP算法的特点是在模式匹配时指示主串的指针不会变小。
2、设模式串的长度为m,目标串的长度为n,当nm且处理只匹配一次的模式时,朴素的匹配(即子串定位函数)算法所花的时间代价可能会更为节省。
3next函数值序列的产生仅与模式串有关。
4空格串就是由零个字符组成的字符序列。 
5、从串中取若干个字符组成的字符序列称为串的子串。
四、 应用题
1空串与空格串有何区别?字符串中的空格符有何意义?
2、 串的存储结构有几种?各有何特点?
3、两个字符串S1S2的长度分别为mn。求这两个字符串最大共同子串算法的时间复杂度为T(m,n)。估算最优的T(m,n),并简要说明理由。
4、设主串S=xxyxxxyxxxxyxyx’,模式串T=xxyxy’。请问:如何用最少的比较次数到TS中出现的位置?相应的比较次数是多少?
5、给出字符串‘abacabaaad’在KMP算法中的nextnextval数组   
五、 算法设计
1、利用C的库函数strlenstrcpy写一算法 void StrDelete(char *S,int i,int m)删除串S中从位置i开始的连续m个字符。若istrlen(S),则没有字符被删除;若i+mstrlen(S),则将S中位置I开始直至末尾的字符都删去。
2、st为两个字符串,分别放在两个一维数组中,mn分别为其长度,判断t是否为s的子串。如果是,输出子串所在位置(第一个字符),否则输出0
3、输入一个字符串,内有数字和非数字字符,如:ak123x456 17960?302gef4563,将其中连续的数字作为一个整体,依次存放到一数组a中,例如123放入a[0],456放入a[1],… … 。编程统计其共有多少个整数,并输出这些数。
4、已知串a和b,试以下两种方式编写算法,求得所有包含在a中而不在b中的字符构成的新串r。
(1) 利用串的基本操作来实现;
(2) 以串的顺序存贮结构来实现。
5、编写一个算法frequency,统计在一个输入字符串中各个不同字符出现的频度。用适当的测试数据来验证这个算法。
6、设x和y是表示成单链表的两个字符串,试写一个算法,出x中第一个不在y中出现的字符(假定每个结点只存放一个字符)。
7、已知字符串S1中存放一段英文,写出算法format(s1,s2,s3,n),将其按给定的长度n格式化成两端对齐的字符串S2, 其多余的字符送S3
8、写一个递归算法来实现字符串逆序存储,要求不另设串存储空间。
9、写一个递归算法来实现字符串逆序存储,要求不另设串存储空间。
10S=S1S2Sn”是一个长为N的字符串,存放在一个数组中,编程序将S改造之后输出:
1)将S的所有第偶数个字符按照其原来的下标从大到小的次序放在S的后半部分;
2)将S的所有第奇数个字符按照其原来的下标从小到大的次序放在S的前半部分;
例如:
S=ABCDEFGHIJKL
则改造后的S为‘ACEGIKLJHFDB’。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。