和出栈操作,试问通过入出栈操作的合法序列。 能否得到输出顺序为325641的序列。 能否得到输出顺序为154623的序列。 12.(1) 什么是递归程序?
(2) 递归程序的优、缺点是什么?
(3) 递归程序在执行时,应借助于什么来完成?
(4) 递归程序的入口语句、出口语句一般用什么语句实现?
13. 在一个算法中需要建立多个堆栈时可以选用下列三种方案之一,试问:这三种方案之间相比较各有什么优缺点?
(1)分别用多个顺序存储空间建立多个独立的堆栈; (2)多个堆栈共享一个顺序存储空间; (3)分别建立多个独立的链接堆栈。
14.在某程序中,有两个栈共享一个一维数组空间SPACE[N]、SPACE[0]、SPACE[N-1] 分别是两个栈的栈底。
(1)对栈1、栈2,试分别写出(元素x)入栈的主要语句和出栈的主要语句。 (2)对栈1、栈2,试分别写出栈满、栈空的条件。
15. 简述顺序存储队列的假溢出的避免方法及队列满和空的条件。 16. 举例说明顺序队的“假溢出”现象,并给出解决方案。 17. 怎样判定循环队列的空和满?
18. 简要叙述循环队列的数据结构,并写出其初始状态、队列空、队列满时的队首指
针与队尾指针的值。
四、算法设计
1.假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的初始化队列、入队列和出队列算法。 2.借助栈(可用栈的基本运算)来实现单链表的逆置运算。
3.假设一个算术表达式中可以包含三种括号:圆括号“(”和“)”,方括号“[”和“]”以及花括号与“{”和“}”,且这三种括号可按任意的次序嵌套试用,如(.. .[.. .{.. .}.. .[.. .].. .].. .( .. .[.. .].. .)。试利用栈的运算编写判断给定表达式中所含括号是否正确 配对出现的算法(可设表达式已存入字符型数组中)。
18
第四章 串
一、选择题
1.下面关于串的的叙述中,哪一个是不正确的?( )
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))) 其结果为( )
A.ABC###G0123 B.ABCD###2345 C.ABC###G2345 D.ABC###2345 E.ABC###G1234 F.ABCD###1234 G.ABC###01234
3.设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为( )
A.求子串 B.联接 C.匹配 D.求串长 4.已知串S=‘aaab’,其Next数组值为( )。
A.0123 B.1123 C.1231 D.1211 5.串 ‘ababaaababaa’ 的next数组为( )。
A.012345678999 B.012121111212 C.011234223456 D.0123012322345 6.字符串‘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 )
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 2 C.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 2 E.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
19
8.若串S=’software’,其子串的数目是( )。 A.8 B.37 C.36 D.9
9.设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.串的长度是指( )
A.串中所含不同字母的个数 B.串中所含字符的个数 C.串中所含不同字符的个数 D.串中所含非空格字符的个数
二、填空题
1.空格串是指__(1)__,其长度等于___(2)__。 2.组成串的数据元素只能是________。 3.一个字符串中________称为该串的子串 。 4.INDEX(‘DATASTRUCTURE’, ‘STR’)=________。
5.设正文串长度为n,模式串长度为m,则串匹配的KMP算法的时间复杂度为________。 6.模式串P=‘abaabcac’的next函数值序列为________。 7.字符串’ababaaab’的nextval函数值为________。
8.设T和P是两个给定的串,在T中寻找等于P的子串的过程称为__(1)__,又称P 为__(2)__。
9.串是一种特殊的线性表,其特殊性表现在__(1)__;串的两种最基本的存储方式是__(2)__、__(3)__;两个串相等的充分必要条件是__(4)__。 10.两个字符串相等的充分必要条件是_______。 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)= ________。 12.实现字符串拷贝的函数 strcpy为:
void strcpy(char *s , char *t) /*copy t to s*/ { while (________) }
13.下列程序判断字符串s 是否对称,对称则返回1,否则返回0;如 f(\返
20
回1,f(\返回0; int f((1)________) {int i=0,j=0;
while (s[j])(2)________;
for(j--; i 三、基础知识题 1.名词解释:串 2.描述以下概念的区别:空格串与空串。 3.两个字符串S1和S2的长度分别为m和n。求这两个字符串最大共同子串算法的时间复杂度为T(m,n)。估算最优的T(m,n),并简要说明理由。 4.设主串S=‘xxyxxxyxxxxyxyx’,模式串T=‘xxyxy’。请问:如何用最少的比较次数找到T在S中出现的位置?相应的比较次数是多少? 5.KMP算法(字符串匹配算法)较Brute(朴素的字符串匹配)算法有哪些改进? 6.已知模式串t=‘abcaabbabcab’写出用KMP法求得的每个字符对应的next和 nextval函数值。 7.给出字符串‘abacabaaad’在KMP算法中的next和nextval数组。 8.令t=‘abcabaa’,求其next 函数值和nextval函数值。 9.已知字符串‘cddcdececdea’,计算每个字符的next和nextval函数的值。 四、算法设计 1.设s、t为两个字符串,分别放在两个一维数组中,m、n分别为其长度,判断t是否为s的子串。如果是,输出子串所在位置(第一个字符),否则输出0。(注:用程序实现) 2.输入一个字符串,内有数字和非数字字符,如:ak123x456 17960?302gef4563,将其中连续的数字作为一个整体,依次存放到一数组a中,例如123放入a[0],456放入a[1],? ? 。编程统计其共有多少个整数,并输出这些数。 3. 以顺序存储结构表示串,设计算法。求串S中出现的第一个最长重复子串及其位置并分析算法的时间复杂度。 4.编写程序,统计在输入字符串中各个不同字符出现的频度并将结果存入文件(字符串中的合法字符为A-Z这26个字母和0-9这10个数字)。 5.写一个递归算法来实现字符串逆序存储,要求不另设串存储空间。 21