您的位置:首页 > 理论基础 > 数据结构算法

串和数组自测题

2016-05-29 14:56 375 查看
一、填空题

1.  不包含任何字符(长度为0)的串 [/u]称为空串;  由一个或多个空格(仅由空格)组成的串   [/u]称为空白串。

2. 设S=“A;/document/Mary.doc”,则strlen(s)=  20  [/u],
“/”的字符定位的位置为  3  [/u]。

4. 子串的定位运算称为串的模式匹配;   被匹配的串  [/u]称为目标串,   子串   [/u]称为模式。

5. 设目标T=”abccdcdccbaa”,模式P=“cdcc”,则第  6  [/u]次匹配成功。

6. 若n为主串长,m为子串长,则串的古典匹配算法最坏的情况下需要比较字符的总次数为  (n-m+1)*m  [/u]。

7. 假设有二维数组A6×8,每个元素用相邻的6个字节存储,存储器按字节编址。已知A的起始存储位置(基地址)为1000,则数组A的体积(存储量)为   288B   [/u];末尾元素A57的第一个字节地址

为   1282   [/u];若按行存储时,元素A14的第一个字节地址为   (8+4)*6+1000=1072     [/u];若按列存储时,元素A47的第一个字节地址为  (6*7+4)*6+1000=1276   [/u]。

(注意审题,理解数组是从0行0列开始的还是从1行1列开始的,由末尾元素57可知是从0行0列开始的)

8. 设数组a[1…60,
1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为  (57*60+31)*2+2048=8950  [/u]。

9. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素

的  行下标   [/u]、   列下标   [/u]和   元素值  [/u]。

10. 求下列广义表操作的结果:

(1) GetHead【((a,b),(c,d))】===       (a,b)    [/u];
     

(2) GetHead【GetTail【((a,b),(c,d))】】===    (c,d)   [/u];

(3) GetHead【GetTail【GetHead【((a,b),(c,d))】】】===    b  [/u];

(4) GetTail【GetHead【GetTail【((a,b),(c,d))】】】===   (d)    [/u];

(做此题注意: GetHead( L) ——取表头(可能是原子或列表); GetTail(L )   ——取表尾(一定是列表) 。)

例如:



二、单选题

( D  )1.  串是一种特殊的线性表,其特殊性体现在:

   A.可以顺序存储        B.数据元素可以是多个字符
    

C.可以链式存储        D.数据元素是一个字符

(  B  )2.  设有两个串p和q,求q在p中首次出现的位置的运算称作:

   A.连接      B.模式匹配    C.求子串       D.求串长

(  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

(  A  )4.  假设有60行70列的二维数组a[1…60,
1…70]以列序为主序顺序存储,其基地址为10000,每个元素占2个存储单元,那么第32行第58列的元素a[32,58]的存储地址为      [/u]。(无第0行第0列元素)

  A.16902    B.16904
     C.14454       D.答案A,
B, C均不对

(解题:(57*60+31)*2+1000=16902)

(  B  ) 5. 设矩阵A是一个对称矩阵,为了节省存储,将其下三角部分(如右图所示)按行序存放在一维数组B[
1, n(n-1)/2 ]中,对下三角部分中任一元素ai,j(i≤j), 在一维数组B中下标k的值是:

A.i(i-1)/2+j-1        B.i(i-1)/2+j     

C.i(i+1)/2+j-1        D.i(i+1)/2+j



(解析:此题如果记不住公式,可以举例子套,用排除法)

6. 从供选择的答案中,选出应填入下面叙述   ?
 [/u]内的最确切的解答,把相应编号写在答卷的对应栏内。

有一个二维数组A,行下标的范围是0到8,列下标的范围是1到5,每个数组元素用相邻的4个字节存储。存储器按字节编址。假设存储数组元素A[0,1]的第一个字节的地址是0。

存储数组A的最后一个元素的第一个字节的地址是   A
  [/u]。若按行存储,则A[3,5]和A[5,3]的第一个字节的地址分别是  B
  [/u]和  C   [/u]。若按列存储,则A[7,1]和A[2,4]的第一个字节的地址分别是  D
  [/u]和  E   [/u]。

供选择的答案

A~E:①28
  ② 44   ③ 76
  ④ 92    ⑤ 108   ⑥ 116
  ⑦ 132   ⑧ 176
   ⑨ 184   ⑩ 188

答案:A= [/u]⑧ [/u]    B= [/u]③ [/u]      C=  [/u]⑤  [/u] 
    D= [/u]① [/u] 
     E= [/u]⑥ [/u]

7. 从供选择的答案中,选出应填入下面叙述   ?
  [/u]内的最确切的解答,把相应编号写在答卷的对应栏内。
有一个二维数组A,行下标的范围是1到6,列下标的范围是0到7,每个数组元素用相邻的6个字节存储,存储器按字节编址。那么,这个数组的体积是   A
  [/u]个字节。假设存储数组元素A[1,0]的第一个字节的地址是0,则存储数组A的最后一个元素的第一个字节的地址是   B
  [/u]。若按行存储,则A[2,4]的第一个字节的地址是  C
  [/u]。若按列存储,则A[5,7]的第一个字节的地址是  D
  [/u]。
供选择的答案
A~D:①12
 ②66  ③72
 ④96  ⑤114
 ⑥120  ⑦156
 ⑧234  ⑨276
  ⑩282   (11)283
 (12)288
答案:A= [/u](12) [/u]    B= [/u](10) [/u]      C= [/u](3) [/u]      D= [/u](9) [/u] 
   

三、计算题
设s=’I AM A STUDENT’, t=’GOOD’, q=’WORKER’,
 求Replace (s,’STUDENT’, q) 和Concat (SubString (s,6,2),
Concat (t, SubString (s,7,8)))。
解:① Replace(s,’STUDENT’,q)=’I AM A WORKER’ 
② 因为  SubString(s,6,2)=‘A ’;SubString(s,7,8)=‘ STUDENT’ Concat(t,SubString(s,7,8))=’GOOD STUDENT’ 
所以Concat(SubString(s,6,2), Concat(t,SubString(s,7,8)))=‘A GOOD STUDENT’

2. 已知主串s=’ADBADABBAABADABBADADA’,模式串pat=’ADABBADADA’。写出模式串的nextval函数值,并由此画出KMP算法匹配的全过程。  

  模式串  :  ADABBADADA
    next:   0112112341

nextval:  0102101040

3.  用三元组表表示下列稀疏矩阵:


参见填空题4. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的行下标、  列下标和元素值 。



4. 下列各三元组表分别表示一个稀疏矩阵,试写出它们的稀疏矩阵。



四、算法设计题

编写一个实现串的置换操作Replace (&S,
T, V)的算法。



写出将字符串反序的递推或递归算法,例如字符串为“abcsxw”,反序为“wxscba”

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 数组