02331数据结构第四章 多维数组和广义表练习题

本篇内容涉及数据结构的多项式练习,包括对称矩阵的压缩存储、二维数组的存储计算、稀疏矩阵的表示及地址计算,以及广义表的操作。详细解答了选择题、填空题和解答题,涵盖了矩阵存储优化、地址计算公式和广义表的表头表尾获取等知识点。
摘要由CSDN通过智能技术生成

自考02331数据结构第四章练习题

一. 单项选择题

  1. 对称矩阵的压缩存储是为了(B)。

    A. 方便运算

    B . 节省空间

    C . 方便存储

    D . 提高运算速度

在书的P91中有提到。

  1. 二维数组M的元素是4个字符(字符占一个存储单元)组成的串,行下标i的范围是07,列下标j的范围是09,则存放M需要存储单元数为 (D)。

    A. 360

    B. 480

    C. 240

    D. 320

参考书的P90,可以用公式带入,不过直接可以算出有多少数组元素,一共8行,10列,算得有80个数组元素,然后一个数组元素占4个字符,再乘4得320。所以选D。

  1. N是一个5*8的二维数组,当N按行优先方式存储时,表示该数组的第10个元素的是:(C)。

    A. N [ 2 ][2]

    B. N [ 2 ][1]

    C. N [ 1][1]

    D. N [ 1 ][2]

参考书的P90,可以用公式带入,i*8+j=10,可得i=1,j=2。说明在第二行的第二个,也就是N[*1][1]

  1. 二维数组M[i][j]的元素是4个字符(每个字符占一个存储单元)组成的串,行下标i的范围是04,列下标j的范围是05,M按行存储时元素M[*3][5]的起始地址与M按列存储时起始地址相同的元素是:(B)。

    A. M[2][4]

    B. M[3][4]

    C. M[3][5]

    D. M[4][4]

M[3][5]是第24个数组元素,可用公式得出:3*(5+1)+(5+1)=24

如果是地址一样的话,那按列存储也应该是第24个数组元素,从上往下,从左往右数,找到后发现是M[3][4]

  1. 稀疏矩阵一般的压缩存储方法有两种,即(D)。

    A. 二维数组和三维数组

    B. 三元组和散列

    C. 顺序表和十字链表

    D. 三元组和十字链表

参考书的P94

  1. 设矩阵A是一个对称矩阵,为了节省存储空间,将其下三角部分按行存放在一维数组SA[n*(n+1)/2]中,对任一下三角部分元素
    a i j ( i ≥ j ) a_{ij}(i≥j) aij(ij)
    在一维数组SA的下标位置k的值是(B)。

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

    B. i*(i+1)/2+j

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

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

参考书的P92

二、填空题

  1. 将三角矩阵A*[8][8]的下三角部分逐行地存储在起始地址为1000的内存单元中,已知每个元素占4个单元,则A[6][4]地址为______1100___。

参考书的P94
k = { n ∗ ( n + 1 ) / 2          i < j , i ∗ ( i + 1 ) / 2 + j        i ≥ j , k=\begin{cases} \end{cases} ^{i*(i+1)/2+j\ \ \ \ \ \ i≥j,} _{n*(n+1)/2\ \ \ \ \ \ \ \ i<j,} k={n(n+1)/2        i<ji(i+1)/2+j      ij
带入到公式中,6 *(6+1)/2+4=25。再乘以4得100,起始位置是1000,所以A[*6][4]地址为1100。

  1. 已知数组A*[10][10]表示对称矩阵,其中每个元素占5个单元,现将其下三角部分按行优先次序存储在起始位置为1000的连续的存储单元中,则A[*4][5]对应的地址为______1075_______。

参考书的P92

在以上的下三角矩阵中,第i行(0≤i≤m-1)恰好有i+1个元素,所以元素总数为
∑ i = 0 n − 1 ( i + 1 ) = n ( n + 1 ) / 2 \sum_{i=0}^{n-1}(i+1)=n(n+1)/2 i=0n1(i+1)=n(n+1)/2
A[*4][5]恰好是下三角部分第5行最后一个,所以5 *(5+1)/2=15

所以A[*4][5]对应的地址是:1000+15 * 5=1075

  1. 广义表((a),a)的表头是_(a)______,表尾是______a___。

参考书的P99

表头是:(a),表尾是:a

  1. 广义表( ( a ) )的表头是___(a),表尾是_()_。

参考书的P99

表头是:(a)表尾是:()

  1. 广义表(((a)))的表头是___((a)),表尾是___()_。

参考书的P99

表头是:((a))表尾是:()

  1. 取出广义表A=((x,y,z),(a,b,c,d))中原子b的函数是: head(tail(head(tail(A))) )

tail(A) : (a,b,c,d)
head(tail(A)) : a,b,c,d
tail(head(tail(A))) : b,c,d
head(tail(head(tail(A))) ) : b

  1. 取出广义表A=((x,(a,b,c,d) ))的原子c的函数是: head(tail(tail(head(tail(head(A)) ))) )

head(A) : x,(a,b,c,d)
tail(head(A)) : (a,b,c,d)
head(tail(head(A)) ) : a,b,c,d

tail(head(tail(head(A)) )) : b,c,d
tail(tail(head(tail(head(A)) ))) : c,d

head(tail(tail(head(tail(head(A)) ))) ) : c

  1. A=(x,((a,b),c,d)),函数head(head(tail(A)))的运算结果是: (a,b)

参考书的P99

三、 解答题

  1. 已知二维数组A_{m*n} 按“行优先顺序”存储在内存中,假设每个元素占d各存储单元,第一个元素的存储地址表示为LOC(A[0][0]),写出计算数组A的任一个元素A[*i][j]的存储地址公式。

参考书的P90
L O C ( A i j ) = L O C ( a 00 ) + ( i ∗ n + j ) ∗ d LOC(A_{ij})=LOC(a_{00})+(i*n+j)*d LOC(Aij)=LOC(a00)+(in+j)d

  1. 已知二维数组A*[5][10]按“行优先顺序”存储在内存中,假设每个元素占3各存储单元,第一个元素的存储地址即LOC(a[0][0])=1000,计算出LOC(A[*3][4])的值。

根据公式:
L O C ( A i j ) = L O C ( a 00 ) + ( i ∗ n + j ) ∗ d LOC(A_{ij})=LOC(a_{00})+(i*n+j)*d LOC(Aij)=LOC(a00)+(in+j)d
LOC(A[3][4])=1000+(310+4) * 3=1102

  1. 已知有一个10阶对称矩阵A,采用压缩存储方式存储(以行序为主,每个元素占1个单元),其起始地址为1000,写出A*[*4][5]的地址。

参考书的P92
k = { j ∗ ( j + 1 ) / 2 + i        i < j , i ∗ ( i + 1 ) / 2 + j        i ≥ j ,           0 ≤ k < n ( n + 1 ) / 2 k=\begin{cases} \end{cases} ^{i*(i+1)/2+j\ \ \ \ \ \ i≥j,} _{j*(j+1)/2+i\ \ \ \ \ \ i<j,} \ \ \ \ \ \ \ \ \ 0≤k<n (n+1) / 2 k={j(j+1)/2+i      i<ji(i+1)/2+j      ij         0k<n(n+1)/2

L O C ( a i j ) = L O C ( s a [ k ] ) = L O C ( s a [ 0 ] ) + k ∗ d LOC(a_{ij})=LOC(sa[k])=LOC(sa[0])+k*d LOC(aij)=LOC(sa[k])=LOC(sa[0])+kd

LOC(A*[4][5])=LOC(A[0][0])+(j(j+1)/2+i) * d=1000+19*1=1019

  1. 求下列各广义表的表头和表尾

    1. ((a,b),c,d)

      参考书的P99

      表头:(a,b)

      表尾:(c,d)

    2. (a,b,c)

      参考书的P99

      表头:a

      表尾:b,c

    3. ((a,b,c))

      参考书的P99

      表头:(a,b,c)

      表尾:()

    4. (a,(b,c),d)

      参考书的P99

      表头:a

      表尾:(b,c),d

    5. ((a,b),(c,(d,())))

      参考书的P99

      表头:(a,b)

      表尾:(c,(d,()))

  2. 求下列广义表的长度和深度:

    1. ( (a) , ( (b) , c ) , ( ((d)) ) )

      参考书的P99

      长度:3

      深度:4

    2. ( a , (a,b) , d , e , ( (i,j ), k ) )

      参考书的P99

      长度:5

      深度:3

    3. (( (a,b) , (c , (d,e) ) )

      你们说,这个是不是少了一个右括号。参考答案 长度是:2 深度是:3

      这样说的话就是表头少了一个右括号,就是:((a,b))

  3. 写出下列稀疏矩阵对应的三元组表。

[ 0 0 1 0 0 − 5 0 2 0 3 0 0 4 0 − 2 0 ] \begin{bmatrix} 0&0&1&0 \\ 0&-5&0&2\\ 0&3&0&0\\ 4&0&-2&0 \end{bmatrix} 0004053010020200

解:

ijv
021
11-5
132
213
304
32-2

这一章看练习题的话倒是蛮简单的,不过真涉及里面的程序算法,哎,不管了。学习下一章,学完后再做试卷,抓紧!抓紧!抓紧!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值