2. 设S=“A;/document/Mary.doc”,则strlen(s)=, “/”的字符定位的位置为。
4. 子串的定位运算称为串的模式匹配;称为目标串,称为模式。
5. 设目标T=”abccdcdccbaa”,模式P=“cdcc”,则第次匹配成功。
6. 若n为主串长,m为子串长,则串的古典匹配算法最坏的情况下需要比较字符的总次数为。
7. 假设有二维数组A6×8,每个元素用相邻的6个字节存储,存储器按字节编址。已知A的起始存储位置(基地址)为1000,则数组A的体积(存储量)为;末尾元素A57的第一个字节地址为;若按行存储时,元素A14的第一个字节地址为;若按列存储时,元素A47的第一个字节地址为。
8.设数组a[1?60, 1?70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为。
9. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素 的、和。
10.求下列广义表操作的结果:
(1)GetHead【((a,b),(c,d))】===; (2)GetHead【GetTail【((a,b),(c,d))】】===;
(3)GetHead【GetTail【GetHead【((a,b),(c,d))】】】===; (4)GetTail【GetHead【GetTail【((a,b),(c,d))】】】===;
二、单选题(每小题1分,共15分)
()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
()4.假设有60行70列的二维数组a[1?60, 1?70]以列序为主序顺序存储,其基地址为10000,每个元素占2个存储单元,那么第32行第58列的元素a[32,58]的存储地址为。(无第0行第0列元素)
A.16902 B.16904 C.14454 D.答案A, B, C均不对
( )5. 设矩阵A是一个对称矩阵,为了节省存储,将其下三角部分(如?a1,1?右图所示)按行序存放在一维数组B[ 1, n(n-1)/2 ]中,对下三角部分中任一??aa2,12,2?元素ai,j(i≤j),在一维数组B中下标k的值是: A?????A.i(i-1)/2+j-1B.i(i-1)/2+j
??C.i(i+1)/2+j-1D.i(i+1)/2+j aa?a?n,2n,n??n,1?
6. 从供选择的答案中,选出应填入下面叙述?内的最确切的解答,把相应编号写在答卷的对应栏内。
有一个二维数组A,行下标的范围是0到8,列下标的范围是1到5,每个数组元素用相邻的4个字节存储。存储器按字节编址。假设存储数组元素A[0,1]的第一个字节的地址是0。
13
存储数组A的最后一个元素的第一个字节的地址是 A 。若按行存储,则A[3,5]和A[5,3]的第一个字节的地址分别是 B 和 C 。若按列存储,则A[7,1]和A[2,4]的第一个字节的地址分别是 D 和 E 。
供选择的答案
A~E:①28 ② 44 ③ 76 ④ 92 ⑤ 108⑥ 116 ⑦ 132 ⑧ 176 ⑨ 184 ⑩ 188 答案:A= B= C= D= E=
7. 从供选择的答案中,选出应填入下面叙述?内的最确切的解答,把相应编号写在答卷的对应栏内。
有一个二维数组A,行下标的范围是1到6,列下标的范围是0到7,每个数组元素用相邻的6个字节存储,存储器按字节编址。那么,这个数组的体积是 A 个字节。假设存储数组元素A[1,0]的第一个字节的地址是0,则存储数组A的最后一个元素的第一个字节的地址是 B 。若按行存储,则A[2,4]的第一个字节的地址是 C 。若按列存储,则A[5,7]的第一个字节的地址是 D 。 供选择的答案
A~D:①12 ②66 ③72 ④96 ⑤114 ⑥120⑦156 ⑧234 ⑨276 ⑩282 (11)283 (12)288 答案:A= B= C= D= E=
三、简答题(每小题5分,共15分)
1. KMP算法的设计思想是什么?它有什么优点?
2. 已知二维数组Am,m采用按行优先顺序存放,每个元素占K个存储单元,并且第一个元素的存储地址为Loc(a11),请写出求Loc(aij)的计算公式。如果采用列优先顺序存放呢?
3.递归算法比非递归算法花费更多的时间,对吗?为什么?
14
四、计算题(每题5分,共20分)
1. 【严题集4.3①】设s=’I AM A STUDENT’, t=’GOOD’, q=’WORKER’,
求Replace(s,’STUDENT’,q)和Concat(SubString(s,6,2), Concat(t,SubString(s,7,8)))。
2. 【严题集4.8②】已知主串s=’ADBADABBAABADABBADADA’,模式串pat=’ADABBADADA’。写出模式串的nextval函数值,并由此画出KMP算法匹配的全过程。
3. 用三元组表表示下列稀疏矩阵:
?00000000??00000000??00000?2????000090??03000800??????000000?00000000??(2)?(1)?
?00060000?005000?????000000??00000000????00000005?000030?????20000000?
4. 下列各三元组表分别表示一个稀疏矩阵,试写出它们的稀疏矩阵。
?646??455??122??111??????2112??249???(1)?313?(2)??
328???444??356???536????437????6116??
五、算法设计题(每题10分,共30分)
1. 【严题集4.12③】编写一个实现串的置换操作Replace(&S, T, V)的算法。
15
2. 【严题集4.10③】写出将字符串反序的递推或递归算法,例如字符串为“abcsxw”,反序为“wxscba”
3. 【严题集5.18⑤】试设计一个算法,将数组An 中的元素A[0]至A[n-1]循环右移k位,并要求只用一
个元素大小的附加存储,元素移动或交换次数为O(n)
附加题:利用C的库函数strlen,strcpy(或strncpy)写一个算法void StrDelete(char *S,int t,int m) ,删除串S中从位置i开始的连续的m个字符。若i≥strlen(S),则没有字符被删除;若i+m≥strlen(S),则将S中从位置i开始直至末尾的字符均被删去。
提示:strlen是求串长(length)函数:int strlen(char s); //求串的长度
strcpy是串复制(copy)函数:char *strcpy(char to,char from);//该函数将串from复制到串to中,并且返回一个指向串to的开始处的指针。
第6章 树和二叉树 自测卷 姓名 班级
题号 题分 得分 一 10 二 15 三 11 四 20 五 20 六 24 总分 100 一、下面是有关二叉树的叙述,请判断正误(每小题1分,共10分)
( )1. 若二叉树用二叉链表作存贮结构,则在n个结点的二叉树链表中只有n—1个非空指针域。 ( )2.二叉树中每个结点的两棵子树的高度差等于1。 ( )3.二叉树中每个结点的两棵子树是有序的。
( )4.二叉树中每个结点有两棵非空子树或有两棵空子树。
( )5.二叉树中每个结点的关键字值大于其左非空子树(若存在的话)所有结点的关键字值,且小于
其右非空子树(若存在的话)所有结点的关键字值。
k-1
( )6.二叉树中所有结点个数是2-1,其中k是树的深度。
16