- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第五章多维数组和广义表习题及答案一、基础知识题5.1请按行及按
第五章
多维数组和广义表
习题及答案
一、基础知识题
5.1请按行及按列优先顺序列出四维数组A2*3*2*3的所有元素在内存中的存储次序,开始结点为a0000 。
a0000 a0001 a0002
a0010 a0011 a0012
a0100 a0101 a0102
a0110 a0111 a0112
a0200 a0201 a0202
a0210 a0211 a0212
a1000 a1001 a1002
a1010 a1011 a1012
a1100 a1101 a1102
a1110 a1111 a1112
a1200 a1201 a1202
a1210 a1211 a1212
按列优先的顺序排列恰恰相反,变化最快的是左边的下标,然后向右变化,所以这个四维数组的排列将是这样的,(这里为了便于阅读,也将其书写为分行形式):
a0000 a1000
a0100 a1100
a0200 a1200
a0010 a1010
a0110 a1110
a0210 a1210
a0001 a1001
a0101 a1101
a0201 a1201
a0011 a1011
a0111 a1111
a0211 a1211
a0002 a1002
a0102 a1102
a0202 a1202
a0012 a1012
a0112 a1112
a0212 a0212
够呛吧,看花了眼? 不看也罢。
5.2 给出C语言的三维数组地址计算公式。
Loc(Amnp)=Loc(A000)+((i*n*p)+k)*d
其中 Amnp表示三维数组。Loc(A000)表示数组起始位置。i、j、k表示当前元素的下标,d表示每个元素所占单元数。
5.3 设有三对角矩阵
An*n,将其三条对角线上的元素逐行地存储到向量B[0...3n-3]中,使得B[k]=aij,求:
(1)用i , j 表示k的下标变换公式。
(2)用 k 表示 i,j 的下标变换公式。
(i*3-1)+j-(i+1)
其中 (i*3-1)是这个元素前面所有行的非零元素个数,j-(i+1)是它所在列前面的非零元素个数
化简可得:
k=2i+j; // c下标是从0开始的。
(2) 解: 因为K和i,j是一一对应的关系,因此这也不难算出:
i=(k+1)/3 //k+1表示当前元素前有几个非零元素,被3整除就得到行号
j=(k+1)%3+(k+1)/3-1 //k+1除以3的余数就是表示当前行中第几个非零元素,加上前面的0元素所点列数就是当前列号
5.4
设二维数组A5*6的每个元素占4个字节,已知Loc(a00)=1000,A共占多少个字节?
A的终端结点a47的起始地位为何?按行和按列优先存储时,a25的起始地址分别为何?
Loc(a45)=Loc(a00)+(i*n+j)*d=1000+(4*6+5)*4=1116
按行优先顺序排列时,
a25=1000+(2*6+5)*4=1068
按列优先顺序排列时:(二维数组可用行列下标互换来计算)
a25=1000+(5*5+2)*4=1108
5.5 特殊矩阵和稀疏矩阵哪一种压缩存储后会失去随机存取的功能?为什么?
5.6 简述广义表和线性表的区别与联系。
5.7 画出下列广义表的图形表示:
(1) A(a,B(b,d),C(e,B(b,d),L(f,g))) (2) A(a,B(b,A))
解:(1)这是一个再入表。(2)则是一个递归表。
5.8
设广义表L=((),()),试问head(L),tail(L),L的长度,深度各为多少?
5.9 求下列广义表运算的结果:
(1)head ((p,h,w)); (2)tail((b,k,p,h)); (3) head (((a,b),(c,d)));
(4)tail(((a,b),(c,d))); (5)head(tail(((a,b),(c,d))));
(6)tail(head)(((a,b),(c,d)))).
解:head((p,h,w))=p
tail((b,k,p,h))=(k,p,h)
head(((a,b),(c,d)))=(a,b)
tail(((a,b),(c,d)))=(c,d)
head(tail(((a,b),(c,d))))=c
tail(head(((a,b),(c,d))))=(b)
二、算法设计题
5.10
当三角矩阵采用题5.3所述的压缩存储时,写一算法求三对角矩阵在这种压缩存储表示下的转置矩阵。
void TransMatrix(DiaMatrix * C)
{
文档评论(0)