数据结构与算法分析 第四章 串、数组和广义表 作业讲解

 参考教材:《数据结构(C语言版 第2版)》 严蔚敏,李冬梅,吴伟民编著,人民邮电出版社,2022年版。

截图未标明出处均为原创或取自《数据结构(C语言版 第2版)》~

 

本文对应的作业题讲解视频:

 数据结构与算法分析作业讲解视频合集icon-default.png?t=N7T8https://www.bilibili.com/video/BV1NN411A7hd/?share_source=copy_web&vd_source=7fbf4cbf97db097fe9c00746d1be6e44

作业讲解文档链接目录: 

第二章 线性表

第三章 栈和队列

第四章 串、数组和广义表

第五章 树和二叉树

第六章 图

第七章 查找

第八章 排序

(۶//•̀ᴗ•́)۶//      (۶//*'▽'*)۶//      (۶//๑˃̵ᴗ˂̵)۶/      (۶//•̀ᴗ•́)۶//      (۶//*'▽'*)۶//      (۶//๑˃̵ᴗ˂̵)۶/

         ╭═════╮╭═══════════╮
     ╭╯让路!   ║ 题来了!题来了!
       ╰⊙═══⊙╯╰═⊙═══⊙═══⊙╯

单选题1

下面关于串的叙述中,哪一个是不正确的?(     )

A. 串是字符的有限序列
B. 空串是由空格构成的串
C. 模式匹配是串的一种重要运算
D. 串既可以采用顺序存储,也可以采用链式存储

正确答案:B

单选题2

下标从1开始,若串S1=‘ABCDEFG’, S2=‘9898’ ,S3=‘###’,S4=‘012345’,执行
concat(replace(S1,substr(S1,length(S2),length(S3)),S3),substr(S4,index(S2,‘8’),length(S2)))其结果为(    )

  1. ABCD###2345
  2. ABC###G0123
  3. ABC###G2345
  4. ABC###2345
  5. ABC###G1234
  6. ABCD###1234
  7. ABC###01234

正确答案:E
思路:

concat: concatenate, 连接, 拼接

substr: substring, 子串, substr(字符串,截取开始位置,截取长度)

已知:S1 = ABCDEFG S2 = 9898, S3= ###, S4 = 012345

求:concat(replace(S1, substr(S1, length(S2), length(S3)), S3), substr(S4, index(S2, '8'), length(S2)))

  1. replace(S1, substr(S1, length(S2), length(S3)), S3)

substr(S1, length(S2), length(S3)) → substr(ABCDEFG,  4,  3) → DEF

replace(S1, EFG, S3) → replace(‘ABCDEFG’, DEF, ‘###’) →

ABC###G   

  1. substr(S4, index(S2, '8'), length(S2)) → substr(012345, 2, 4)

1234

最后:concat(ABC###G, 1234) → ABC###G1234

单选题3

设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为(    )

A. 求子串
B. 联接
C. 匹配
D. 求串长

正确答案:C

单选题4

若串S=’software’,其子串的数目是(    )。

A. 8
B. 37
C. 36
D. 9

正确答案:B
思路:

子串的定义:

长度为0的子串个数:1

长度为1的子串个数:8

长度为2的子串个数:7

长度为3的子串个数:6

长度为4的子串个数:5

长度为5的子串个数:4

长度为6的子串个数:3

长度为7的子串个数:2

长度为8的子串个数:1

所以一共有子串个数= 1 + (8 + 2)*7 /2  +1 =37

单选题5

设S为一个长度为n的字符串,其中的字符各不相同,则S中的互异的平凡子串非空且不同于S本身的个数为(  )

  1. 2n-1
  2. n^2
  3. (n^2/2}+(n/2)
  4. (n^2/2)}+(n/2)-1
  5. (n^2/2)-(n/2)-1
  6. 其他情况

正确答案:D
思路:

方法1:

第4题的非平凡子串个数:

长度为1的子串个数:8

长度为2的子串个数:7

长度为3的子串个数:6

长度为4的子串个数:5

长度为5的子串个数:4

长度为6的子串个数:3

长度为7的子串个数:2

↓推广到更一般的

字符串长度为n↓

字符串长度为n:

长度为1的子串个数:n

长度为2的子串个数:n-1

长度为3的子串个数:n-2

...

长度为n-1的子串个数:2

等差数列求和= (n-1)*(n+2)/2

= (n^2/2) + (n/2) -1

方法2:特殊值法

令n=1, 则根据定义,非平凡子串的个数为0,将n=1带入所有答案:

A:1 ×; B:2 ×;C:1 ×;D:0 √;E:-1 ×。

所以最后答案选择D;

单选题6

串的长度是指(    )

A. 串中所含不同字母的个数
B. 串中所含字符的个数
C. 串中所含不同字符的个数
D. 串中所含非空格字符的个数

正确答案:B

单选题7

下标从1开始,INDEX(DATASTRUCTURE, STR)= (   )

  1. 5
  2. 6
  3. 7
  4. 8

正确答案:A

思路:

单选题8

两个字符串相等的充分必要条件是(  

  1. 两串的长度相等  
  1. 两串的长度相等且两串中对应位置的字符也相等
  2. 串中的字符一样,,与患长长度无关
  3. 函数返回值为0

正确答案:B

多选题9

串的两种最基本的存储方式是__和__

  1. 顺序存储
  2. 压缩存储
  3. 线性存储
  4. 链式存储

正确答案:A,  D

单选题10

串是一种数据对象和操作都特殊的线性表。(    )

A. 正确
B. 错误

正确答案:A

单选题11

设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为(  )

A. 13
B. 33
C. 18
D. 40

正确答案:B

单选题12

有一个二维数组A[1:6,0:7],每个数组元素用相邻的6个字节存储,存储器按字节编址,那么这个数组的体积是( )个字节。假设存储数组元素A[1,0]的第一个字节的地址是0,则存储数组A的最后一个元素的第一个字节的地址是()。若按行存储,则A[2,4]的第一个字节的地址是()。若按列存储,则A[5,7]的第一个字节的地址是()。(选择四个答案即可)

  1. 12
    B. 66
    C. 72
    D. 96
  1. 114
  2. 120
  3. 156
  4. 234
  5. 276
  6. 282
  7. 283
  8. 288

正确答案:C, I, J, L

单选题13

就一般情况而言,当( )时,按行存储的A[I,J]地址与按列存储的A[J,I]地址相等。

A. 行与列的上界相同
B. 行与列的下界相同
C. 行与列的上、下界都相同
D. 行的元素个数与列的元素个数相同

正确答案:C
思路:

假设A为n行m列的二维数组且A[p,q]为数组的第一元素,则:

存储A[i, j] 的地址: (i - p) * m + j - q

存储A[j, i] 的地址: (i - q) * n + j - p

只有同时满足行与列的上下界都相同,即m=n且p=q时,才能保证两式相等,所以答案选C。

单选题14

设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为(  )。

A. BA+141
B. BA+180
C. BA+222
D. BA+225

正确答案:B

单选题15

假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存储单元,基地址为10,则LOC[5,5]=(    )。

A. 808
B. 818
C. 1010
D. 1020

正确答案:B

单选题16

将一个A[1..100,1..100]的三对角矩阵,按行优先存入一维数组B[1‥298]中,A中元素A6665(即该元素下标i=66,j=65),在B数组中的位置K为(  )。

A. 198
B. 195
C. 197

正确答案:B

单选题17

二维数组A的每个元素是由6个字符组成的串,其行下标i=0,1,…,8,列下标j=1,2,…,10。若A按行先存储,元素A[8,5]的起始地址与当A按列先存储时的元素(  )的起始地址相同。设每个字符占一个字节。

A. A[8,5]
B. A[3,10]
C. A[5,8]
D. A[0,9]

正确答案:B

单选题18

若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[1..(n(n+1))/2]中,则在B中确定aij(i<j,矩阵元素下标从1开始)的位置k的关系为:

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

正确答案:B
思路:

aij(i<j,矩阵元素下标从1开始),说明aij是在矩阵的上三角区域。又因为A是对称矩阵,即aji = aij,且存储的是下三角的元素, 所以求aji在B中的位置即可。最终得到aij= aji = j*(j-1)/2+i。

单选题19

设二维数组A[1..m,1..n](即m行n列)按行存储在数组B[1..m*n]中,则二维数组元素A[i,j]在一维数组B中的下标为(  )。

A. (i-1)*n+j
B. (i-1)*n+j-1
C. i*(j-1)
D. j*m+i-1

正确答案:A

单选题20

数组A[0..4,-1..-3,5..7]中含有元素的个数(    )。

A. 55
B. 45
C. 36
D. 16

正确答案:B
思路:

第一维0..4: 5; 第二维1..3: 3;第三维5..7:3

元素个数= 5*3*3 = 45

单选题21

已知广义表L=((x,y,z),a,(u,t,w)),从L表中取出原子项t的运算是(    )。

A. head(tail(tail(L)))
B. tail(head(head(tail(L))))
C. head(tail(head(tail(L))))
D. head(tail(head(tail(tail(L)))))

正确答案:D

单选题22

已知广义表LS=((a,b,c),(d,e,f)),运用head和tail函数取出LS中原子e的运算是(    )。

A. head(tail(LS))
B. tail(head(LS))
C. head(tail(head(tail(LS)))
D. head(tail(tail(head(LS))))

正确答案:C

单选题23

广义表A=(a,b,(c,d),(e,(f,g))),则Head(Tail(Head(Tail(Tail()))))为(  )。

A. (g)
B. (d)
C. c
D. d

正确答案:D

单选题24

广义表运算式Tail(((a,b),(c,d)))的操作结果是(    )。

A. (c,d)
B. c,d
C. ((c,d))
D. d

正确答案:C

单选题25

广义表L=(a,(b,c)),进行Tail()操作后的结果为(   )。

A. c
B. b,c
C. (b,c)
D. ((b,c))

正确答案:D

多选题26

广义表((a,b,c,d))的表头是(    ),表尾是(    )。(请选择两项)

A. a
B. ( )
C. (a,b,c,d)
D. (b,c,d)

正确答案:C;B
思路:

(1)取表头GetHead(LS):取出的表头为非空广义表的第一个元素,它可以是一个单原子,也可以是一个子表。

(2)取表尾GetTail(LS):取出的表尾为除去表头之外,由其余元素构成的表。即表尾一定是一个广义表。

((a,b,c,d)):

GetHead操作:(a,b,c,d),选答案C

GetTail操作:(),选答案B

单选题27

广义表(a,(b,c),d,e)的表头为(    )。

A. a
B. a,(b,c)
C. (a,(b,c))
D. (a)

正确答案:A

单选题28

设广义表L=((a,b,c)),则L的长度和深度分别为(    )。

A. 1和1
B. 1和3
C. 1和2
D. 2和3

正确答案:C
思路:

长度 = 表中元素个数

深度 = 表中括号的重数

单选题29

下面说法不正确的是(    )。    

A. 广义表的表头总是一个广义表
B. 广义表的表尾总是一个广义表
C. 广义表难以用顺序存储结构
D. 广义表可以是一个多层次的结构

正确答案:A
思路:

(1)取表头GetHead(LS):取出的表头为非空广义表的第一个元素,它可以是一个单原子,也可以是一个子表。

(2)取表尾GetTail(LS):取出的表尾为除去表头之外,由其余元素构成的表。即表尾一定是一个广义表。

单选题30

有一个100*90的稀疏矩阵,非0元素有10个,设每个整型数占2字节,则用三元组表示该矩阵时,所需的字节数是(    )。

A. 60
B. 66
C. 18000
D. 33

正确答案:B
思路:

i1

i2

......

i9

I10

j1

j2

......

j9

j10

X1

X2

......

X9

X10

又因为每个整型数占2个字节:10*3*2=60

还要存储100*90这个行列信息:需要再开辟连续的一组(三个)空间,

100(行数)

90(列数)

10(非空元素数)

所以最终,所需60 + 3*2=66个字节

单选题31

对稀疏矩阵进行压缩存储目的是(    )。

A. 便于矩阵运算
B. 便于输入和输出
C. 节省存储空间
D. 降低运算复杂度

正确答案:C
思路:

单选题32

从逻辑结构上看,n维数组的每个元素均属于n个向量。(    )

A. 正确
B. 错误

正确答案:A
思路:

 

E.g. 2维数组可以定义为其数据元素为1维数组类型的一维数组类型:

单选题33

数组可看成线性结构的一种推广,因此与线性表一样,可以对它进行插入,删除等操作。( )

  1. 正确
  2. 错误

正确答案:B
思路:

数组一旦被定义,它的维数和维界就不再改变。因此,除了结构的初始化和销毁之外,数组只有存取元素和修改元素值的操作。

单选题34

稀疏矩阵压缩存储后,会失去随机存取功能。(    )

A. 正确
B. 错误

正确答案:B

单选题35

一个稀疏矩阵Am*n采用三元组形式表示,若把三元组中有关行下标与列下标的值互换,并把m和n的值互换,则就完成了Am*n的转置运算。(    )

A. 正确
B. 错误

正确答案:B
思路:

稀疏矩阵用三元组形式表示:将矩阵的所有非零元素的三元组存放在一个顺序表中。矩阵转置的实现过程需完成以下 3 步:

(1)将矩阵的行数和列数互换;

(2)将三元组表(存储矩阵)中的 i 列和 j 列互换,实现矩阵的转置;

(3)以 j 列为序,重新排列三元组表中存储各三元组的先后顺序;

Ref:https://blog.csdn.net/weixin_45609535/article/details/127136005

单选题36

二维以上的数组其实是一种特殊的广义表。(    )

A. 正确
B. 错误

正确答案:A
思路:

E.g.  三维数组:[[[a], [b], [c]], [[d], [e], [f]]]

特点:组成三维数组的数据元素是二维数组→组成n维数组的数据元素是n-1维数组(n≥2)

单选题37

广义表的取表尾运算,其结果不空的情况下,通常是个表,但有时也可是个单元素值。(    )

A. 正确
B. 错误

正确答案:B
思路:

取表尾GetTail(LS): 取出的表尾为除去表头之外,由其余元素构成的表。即表尾一定是一个广义表。

单选题38

若一个广义表的表头为空表,则此广义表亦为空表。(    )

A. 正确
B. 错误

正确答案:B
思路:

((), (a, b, c)):表头是一个空表,但原广义表不是空表

单选题39

广义表中的元素或者是一个不可分割的原子,或者是一个非空的广义表。(    )

A. 正确
B. 错误

正确答案:B
思路:

反例: ((), (a, b, c))是合法的广义表

单选题40

所谓取广义表的表尾就是返回广义表中最后一个元素。(    )

A. 正确
B. 错误

正确答案:B
思路:

取表尾GetTail(LS): 取出的表尾为除去表头之外,由其余元素构成的表。即表尾一定是一个广义表。

单选题41

广义表的同级元素(直属于同一个表中的各元素)具有线性关系。(    )

A. 正确
B. 错误

正确答案:A
思路:

举例:D = (A, B, C) = ((), (e), (a, (b, c, d)))

单选题42

对长度为无穷大的广义表,由于存储空间的限制,不能在计算机中实现。(    )

A. 正确
B. 错误

正确答案:A
思路:

因为计算机存储空间是有限的

单选题43

一个广义表可以为其它广义表所共享。(    )

A. 正确
B. 错误

正确答案:A
思路:

举例:D = (A, B, C) = ((), (e), (a, (b, c, d)))

୧ʕ•̬͡•ʕ•̫͡•♡ʕ͙•̫͑͡•ʔͦʕͮ•̫ͤ͡•ʔ͙ʕ•̫͡•ʕ•̫͡•ʔ୧ʕ•̬͡•ʕ•̫͡•♡〰︎ \ HAVE A GOOD DAY / 〰︎ ʕ•̫͡•ʕ•̫͡•ʔ୧ʕ•̬͡•ʕ•̫͡•♡ʕ͙•̫͑͡•ʔͦʕͮ•̫ͤ͡•ʔ͙୧ʕ•̬͡•ʕ•̫͡•♡ 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值