《数据结构》-第四章 串、数组和广义表(习题)

本篇博客详细介绍了串、数组和广义表在计算机科学中的基本概念和操作,包括串的模式匹配算法、数组的下标与存储地址计算、特殊矩阵的压缩存储以及广义表的原子项操作、长度和深度的求解。还涵盖了相关数据结构的选择题解析,如串的长度、数组元素地址计算、对称矩阵的压缩存储、稀疏矩阵的存储结构等,帮助读者深入理解这些核心概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第四章 串、数组和广义表练习题

    本章考点较少易于掌握,对于串的重点考点为串的模式匹配算法;数组的主要考点为数组下标与存储地址计算和特殊矩阵的压缩存储方法;针对广义表的考点主要为在广义表中取原子项(表)的操作、求表的长度和深度。同时,应注意相关概念的区分。


一、选择题

1. 串的长度是指( )。

        A.串中所含不同字母的个数    B.串中所含字符的个数

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

     【答案】B。串中字符的数目称为串的长度

2. 设有数组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 。以列序为主,则LOC[5,8]=[(8-1)*8+(5-1)]*3+BA=BA+180

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

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

    【答案】C. 以列序为主,则LOC[8,5]=[8*(8-1)/2+5-1]+1=33

4. 维数组A的每个元素是由10个字符组成的串,其行下标 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。设数组从内存首地址M开始顺序存放,若数组按行先存储,元素 A[8,5]的起始地址为:M+[(8-0) *10+( 5-1)]*1=M+84;若数组按列先存储,易计算出元素 A[3,10]的起始地址为:M+[ (10-1)*9+(3-0)]*1=M+84。

5. 设二维数组 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。 本题可采用特殊值法。取i=j=1,易知A[1,1]的下标为1,四个选项中仅有 A 选项能确定的值为 1故选 A 。

6. 对n阶对称矩阵压缩存储时,需要表长为( )的顺序表。

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

     【答案】C。对对称矩阵的存储只需要存储其上三角或下三角部分(含对角线),元素个数为n +(n-1)+ (n -2) +..*+ 1 =n(n+ 1)/2。

7. 若将n阶下三角矩阵A按列优先顺序压缩存放在一维敏组B[1..n(n+1)/2+1]中,则存

放到B[k]中的非零元素aij(1≤i,j≤n)的下标j与k的对应关系是( )。

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

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

     【答案】B。按列优先存储,故元素aij之前有j-1列,共有n+(n-1)+..+(n-j+2)=(j-1)(2n-j+ 2)/2个元素,元素aij是第j列上第i-j+1个元素,数组B下标从1开始,k=(j-1)(2n-j+ 2)/2+i-j+1。

8. 适用于压缩存储稀疏矩阵的两种存储结构是( ).

       A.三元组表和十字链表        B.三元组表和邻接矩阵

       C.十字链表和二叉链表        D.邻接矩阵和十宇链表

     【答案】A。三元组表的结点存储了行row、列col、值value三种信息,是主要用来存储稀疏矩阵的一种数据结构。十字链表将行单链表和列单链表结合起来存储稀疏矩阵。邻接矩阵空间复杂度达0(n2),不适合于存储稀疏矩阵。而二叉链表又名左孩子右兄弟表示法,可用于表示树或森林。

9. 设有一个12x12的对称矩阵M,将其上三角部分的元素m/(1≤i≤j≤12)按行优先存入C语言的一维数组N中,元素m6,6在N中的下标是( )。

       A.50        B.51           C.55        D. 66

     【答案】A。在C语言中,数组N的下标从0开始。第一个元素m,对应存入no,矩阵M的第一行有12个元素,第二行有11个,第三行有10个,第四行有9个,第五行有8个,所以m6..是第12+ 11+10+9+8+1=51个元素,下标应为50。

10. 串“ ababaaababaa ”的 next 数组为( )。

     A.012345678999          B.012121111212

     C.011234223456          D.0123012322345

   【答案】C。具体过程如下:

11. 串“ ababaabab ”的 nextval 为( )。

       A. 010104101           B.010102101

       C. 010100011           D.010101011

     【答案】A。nextval数组的确认:首先要确定next数组,在确定next数组后按照第10题中方法确定nextval数组。其结果如图所示:

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

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

   【答案】D。过程如下:

13. 广义表 ((a,b,c,d)) 的表头是( ),表尾是( )。

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

     【答案】C、B。表头为非空广义表的第一个元素,可以是一个单原子,也可以是一个子表,((a,b,c,d)) 的表头为一个子表(a,b,c,d);表尾为除去表头之外,由其余元素构成的表,表为一定是个广义表,((a,b,c,d))的表尾为空表 ( ) 。

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

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

     【答案】C 。广义表的深度是指广义表中展开后所含括号的层数,广义表的长度是指广义表中所含元素的个数。根据定义易知L的长度为1,深度为2。

二、填空题

1. 将整型数组 A[1..8,1..8]按行优先次序存储在起始地址为 1000 的连续的内存单元 中,则元素 A[7,3]的地址是:______。

     【答案】1100。注意,整形一般情况下占用两个字节大小,计算过程为1000+[(7-1)*8+(3-1)]*2=1100

2. 三维数组 a[4][5][6](下标从 0 开始计,a 有 4*5*6 个元素),每个元素的长度是 2,则 a[2][3][4]的地址是_____。(设 a[0][0][0]的地址是 1000,数据以行为主方式存储)

     【答案】1164。具体计算如下:[(2-0)*5*6+(3-0)*6+(4-0)]*2+1000=1164。

3. 设二维数组 A[-20..30,-30..20], 每个元素占有 4 个存储单元, 存储起始地址为 200. 如按行优先顺序存储,则元素 A[25,18]的存储地址为____;如按列优先顺序存储,则元素 A[-18,-25]的存储地址为______。

     【答案】①9572;②1228。

                    具体计算如下:①[(20+25)*51+(18+30)*4]+200=9572;

                                            ②[(-25+30)*51+(-18+20)*4]+200=1228;

4. 己知三对角矩阵A[1..9,1..9]的每个元素占2个单元,现将其三条对角线上的元素逐行存储在起始地址为1000的连续的内存单元中,则元素A[7,8]的地址为___。

     【答案】1038。具体计算过程如下:元素A[7,8]是第7行的第3个元素。为了找到A[7,8]之前的元素总数,需要计算前6行的元素数量,然后加上第7行的前2个元素。前6行的元素数量为: 2+3+3+3+3+3=17,加上第7行的前2个元素,得到: 17+2=19。由于每个元素占2个单元,A[7,8]之前的总单元数为: 19×2=38

因此,A[7,8]的地址为: 1000+38=1038

5. 数组 A[1..8,-2..6,0..6]以行为主序存储,设第一个元素的首地址是 78,每个元 素的长度为 4,试求元素 A[4,2,3]的存储首地址。

     【答案】958。具体计算过程如下:78+4*(3*9*7+4*7+3)=958。

6. 给出字符串‘abacabaaad’在 KMP 算法中的 next 和 nextval 数组

     【答案】 ①0112123422;②01020101422

7.令 t=‘abcabaa’,求其 next 函数值和 nextval 函数值。

     【答案】①0111232;②0110132

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值