自考02331数据结构第四章练习题
一. 单项选择题
-
对称矩阵的压缩存储是为了(B)。
A. 方便运算
B . 节省空间
C . 方便存储
D . 提高运算速度
在书的P91中有提到。
-
二维数组M的元素是4个字符(字符占一个存储单元)组成的串,行下标i的范围是07,列下标j的范围是09,则存放M需要存储单元数为 (D)。
A. 360
B. 480
C. 240
D. 320
参考书的P90,可以用公式带入,不过直接可以算出有多少数组元素,一共8行,10列,算得有80个数组元素,然后一个数组元素占4个字符,再乘4得320。所以选D。
-
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]
-
二维数组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]
-
稀疏矩阵一般的压缩存储方法有两种,即(D)。
A. 二维数组和三维数组
B. 三元组和散列
C. 顺序表和十字链表
D. 三元组和十字链表
参考书的P94
-
设矩阵A是一个对称矩阵,为了节省存储空间,将其下三角部分按行存放在一维数组SA[n*(n+1)/2]中,对任一下三角部分元素
a i j ( i ≥ j ) a_{ij}(i≥j) aij(i≥j)
在一维数组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
二、填空题
- 将三角矩阵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<j,i∗(i+1)/2+j i≥j,
带入到公式中,6 *(6+1)/2+4=25。再乘以4得100,起始位置是1000,所以A[*6][4]地址为1100。
- 已知数组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=0∑n−1(i+1)=n(n+1)/2
A[*4][5]恰好是下三角部分第5行最后一个,所以5 *(5+1)/2=15所以A[*4][5]对应的地址是:1000+15 * 5=1075
- 广义表((a),a)的表头是_(a)______,表尾是______a___。
参考书的P99
表头是:(a),表尾是:a
- 广义表( ( a ) )的表头是___(a),表尾是_()_。
参考书的P99
表头是:(a)表尾是:()
- 广义表(((a)))的表头是___((a)),表尾是___()_。
参考书的P99
表头是:((a))表尾是:()
- 取出广义表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
- 取出广义表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,dtail(head(tail(head(A)) )) : b,c,d
tail(tail(head(tail(head(A)) ))) : c,dhead(tail(tail(head(tail(head(A)) ))) ) : c
- A=(x,((a,b),c,d)),函数head(head(tail(A)))的运算结果是: (a,b) 。
参考书的P99
三、 解答题
- 已知二维数组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)+(i∗n+j)∗d
- 已知二维数组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)+(i∗n+j)∗d
LOC(A[3][4])=1000+(310+4) * 3=1102
- 已知有一个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<j,i∗(i+1)/2+j i≥j, 0≤k<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])+k∗d
LOC(A*[4][5])=LOC(A[0][0])+(j(j+1)/2+i) * d=1000+19*1=1019
-
求下列各广义表的表头和表尾
-
((a,b),c,d)
参考书的P99
表头:(a,b)
表尾:(c,d)
-
(a,b,c)
参考书的P99
表头:a
表尾:b,c
-
((a,b,c))
参考书的P99
表头:(a,b,c)
表尾:()
-
(a,(b,c),d)
参考书的P99
表头:a
表尾:(b,c),d
-
((a,b),(c,(d,())))
参考书的P99
表头:(a,b)
表尾:(c,(d,()))
-
-
求下列广义表的长度和深度:
-
( (a) , ( (b) , c ) , ( ((d)) ) )
参考书的P99
长度:3
深度:4
-
( a , (a,b) , d , e , ( (i,j ), k ) )
参考书的P99
长度:5
深度:3
-
(( (a,b) , (c , (d,e) ) )
你们说,这个是不是少了一个右括号。参考答案 长度是:2 深度是:3
这样说的话就是表头少了一个右括号,就是:((a,b))
-
-
写出下列稀疏矩阵对应的三元组表。
[ 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} ⎣⎢⎢⎡00040−530100−20200⎦⎥⎥⎤
解:
i j v 0 2 1 1 1 -5 1 3 2 2 1 3 3 0 4 3 2 -2
这一章看练习题的话倒是蛮简单的,不过真涉及里面的程序算法,哎,不管了。学习下一章,学完后再做试卷,抓紧!抓紧!抓紧!!!!