考研题目 第五章 数组和广义表答案

第五章 数组和广义表

一、选择题 

1.B

2.1L

2.2J

2.3C

2.4I

2.5C

3.B

4.B

5.A

6.1H

6.2C

6.3E

6.4A

6.5F

7.B

8.1E

8.2A

8.3B

9.B

10.B

11.B

12.B

13.A

14.B

15.B

16.A

17.C

18.D

19.C

20.D

21.F

22.C

23.D

24.C

25.A

26.C

27.A

 

 

 

 

 

 

 

 

 

 

 

二、判断题

1. ×

2.

3.

4.×

5.×

6. ×

7.

8.×

9.×

10.×

11.×

12.

13.

14.

 

 

 

 

 

 

 

 

 

 

部分答案解释如下。

1. 错误。对于完全二叉树,用一维数组作存储结构是效率高的(存储密度大)。

4. 错误。数组是具有相同性质的数据元素的集合,数据元素不仅有值,还有下标。因此,可以说数祖是元素值和下标构成的偶对的有穷集合。

5. 错误。数组在维数和界偶确定后,其元素个数已经确定,不能进行插入和删除运算。

6. 错误。稀疏矩阵转置后,除行列下标及行列数互换外,还必须确定该元素转置后在新三元组中的位置。

8. 错误。广义表的取表尾运算,是非空广义表除去表头元素,剩余元素组成的表,不可能是原子。

9. 错误。广义表的表头就是广义表的第一个元素。只有非空广义表才能取表头。

10. 错误。广义表中元素可以是原子,也可以是表(包括空表和非空表)。

11. 错误。广义表的表尾,指去掉表头元素后,剩余元素所组成的表。

 

三、填空题

1. 顺序存储结构       2.1957221228      3.1917428788     4. 1100

5. 1164 公式:LOC(aijk)=LOC(a000)+[v2*v3*(i-c1)+v3*(j-c2)+(k-c3)]*l (l为每个元素所占单元数)

6. 232      7. 1340       8. 1196        9. 1行第3

10. (1)270 (2)27 (3)2204      11. i(i-1)/2+j (1<=i,j<=n)

12. (1)n(n+1)/2 (2)i(i+1)/2 (j(j+1)/2) (3)i(i-1)/2+j (4)j(j-1)/2+i (1<=i,j<=n)

13. 1038 三对角矩阵按行存储:k=2(i-1)+j (1<=i,j<=n)

14. 33 (k=i(i-1)/2+j) (1<=i,j<=n)    

15. 非零元很少(t<<m*n)且分布没有规律      16. 节省存储空间。     

17. 上三角矩阵中,主对角线上第r(1£r£n) 行有n-r+1个元素,aij所在行的元素数是j-i+1。所以,元素在一维数组的下标k和二维数组下标关系:k=((i-1)*(2n-i+2))/2+(j-i+1)=(i-1)(2n-i)/2+j  (i£j)

18. 93           19. i(i-1)/2+j           20. 线性表                21. 其余元素组成的表

22. 1) 原子(单元素)是结构上不可再分的,可以是一个数或一个结构;而表带结构,本质就是广义表,因作为广义表的元素故称为子表。

2)大写字母 (3)小写字母 (4)表中元素的个数(5)表展开后所含括号的层数

23. 深度            24.1)() (2)(())  32  42

25. headheadtailtailheadtailtailA)))))))

26. 表展开后所含括号的层数    27.15  23

28. head(head(tail(LS)))     29. head(tail(tail(head(tail(head(A))))))

30. head(tail(head(tail(H))))  31. (b)  32. (x,y,z)   33. (d,e)

34. GetHead(GetHead(GetTail(L)))

35. 本算法中,首先数组b中元素以逆置顺序放入d数组中,然后数组a和数组d的元素比较,将大者拷贝到数组c。第一个WHILE循环到数组a或数组d结尾,第二个和第三个WHILE语句只能执行其中的一个。        

1b[m-i+1]2x:=a[i]3i:=i+14x:=d[j]5j:=j+1 6k:=k+17i<=l8j<=m

36.1(i==k) return2i+13i-14i!=k

  本算法利用快速排序思想,找到第k个元素的位置(下标k-1因而开初有k--)。内层do循环以t(t=a[low])为“枢轴”找到其应在i位置。这时若i等于k,则算法结束。(即第一个空格处if(i==k) return)。否则,若i<k,就在i+1high中间去查;若i>k,则在lowi-1间去找,直到找到i=k为止。

37.逆置广义表的递归模型如下

   f(LS)=               

上面appEND(a,b)功能是将广义表ab作为元素的广义表连接起来。

1(p->tag==0)                //处理原子

2h=reverse(p->val.ptr.hp)   //处理表头

3(p->val.ptr.tp)            //产生表尾的逆置广义表

4s->val.ptr.tp=t;           //连接

5q->val.ptr.hp=h            //头结点指向广义表

38. 本题要求将12...,n*n个自然数,按蛇型方式存放在二位数组A[n][n]中。“蛇型”方式,即是按“副对角线”平行的各对角线,从左下到右上,再从右上到左下,存放n2个整数。对角线共2n-1条,在副对角线上方的对角线,题目中用k表示第k条对角线(最左上角k=1),数组元素xy方向坐标之和为k+1(即题目中的i+j=k+1)。副对角线下方第k条对角线与第2n-k条对角线对称,其元素的下标等于其对称元素的相应坐标各加(k-n)

1k<=2*n-1 //共填2*n-1条对角线

2q=2*n-k  //副对角线以下的各条对角线上的元素数

3k%2=0  //k为偶数时从右上到左下,否则从左下向右上填数。(本处计算下标ij

4k>=n     //修改副对角线下方的下标ij

5m++;或m=m+1 //为填下个数作准备,m变化范围1..n*n

本题解法的另一种思路见本章算法设计题第9题。

39.本题难点有二:一是如何求下一出圈人的位置,二是某人出圈后对该人的位置如何处理。

按题中要求,从第s个人开始报数,报到第m个人,此人出圈。n个人围成一圈,可看作环状,则下个出圈人,其位置是(s+m-1)%nn是人数,是个变量,出圈一人减1,算法中用i表示。对第二个问题,算法中用出圈人后面人的位置依次前移,并把出圈人的位置(下标)存放到当时最后一个人的位置(下标)。算法最后打印出圈人的顺序。

1(s+m-1) MOD i  //计算出圈人s1

2s1:=i          //s1=0,说明是第i个人出圈(i%i=0

3s1 TO i-1      //s1i依次前移,使人数减1,并将出圈人放到当前最后一个位置A[i]=w

40. 若第n件物品能放入背包,则问题变为能否再从n-1件物品中选出若干件放入背包(这时背包可放入物品的重量变为s-w[n])。若第n件物品不能放入背包,则考虑从n-1件物品选若干件放入背包(这时背包可放入物品仍为s)。若最终s=0,则有一解;否则,若s<0或虽然s>0但物品数n<1,则无解。

1s-w[n],n-1  //Knap(s-w[n],n-1)=true

2s,n-1       // KnapKnap(s,n-1)

 

四、应用题

1958   三维数组以行为主序存储,其元素地址公式为:

LOC(Aijk)=LOC(Ac1c2c3)+[(i-c1)V2V3+(j-c2)V3+(k-c3)]*L+1

其中ci,di是各维的下界和上界,Vi=di-ci+1是各维元素个数,L是一个元素所占的存储单元数。

2. b对角矩阵的b条对角线,在主对角线上方和下方各有ëb/2û条对角线(为叙述方便,下面设a=ëb/2û)。从第1行至第a行,每行上的元素数依次是a+1,a+2,...,b-2,b-1,最后的a行上的元素个数是 b-1b-2,...,a+1。中间的(n-2a )行,每行元素个数都是b。故b条对角线上元素个数为 (n-2a)b+a*(a+b)。存放在一维数组V[1..nb-a(b-a)]中,其下标k与元素在二维数组中下标ij的关系为:

       k=

3.每个元素32个二进制位,主存字长16位,故每个元素占2个字长,行下标可平移至111

1242   222   3s+182   4s+142

41784  (公式:Loc(Aijkl)=100(基地址)+[(i-c1)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值