第五章数组和广义表习题数据结构.docx
- 文档编号:11118184
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:18
- 大小:28.19KB
第五章数组和广义表习题数据结构.docx
《第五章数组和广义表习题数据结构.docx》由会员分享,可在线阅读,更多相关《第五章数组和广义表习题数据结构.docx(18页珍藏版)》请在冰豆网上搜索。
第五章数组和广义表习题数据结构
习题五数组和广义表一、单项选择题)1.常对数组进行的两种基本操作是(D.查找与索引C.B.索引与修改建立与删除A.查找与修改K个存储单元,二维数组中DataTypeA[m][n],2.对于C语言的二维数组每个数据元素占.()a[i,j]的存储位置可由任意元素式确定
A.Loc[i,j]=A[m,n]+[(n+1)*i+j]*kB.Loc[i,j]=loc[0,0]+[(m+n)*i+j]*k
C.Loc[i,j]=loc[0,0]+[(n+1)*i+j]*kD.Loc[i,j]=[(n+1)*i+j]*k
3.稀疏矩阵的压缩存储方法是只存储()
A.非零元素三元祖(i,j,aij)D.i,jC.aijB.
数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为10004.
()的地址是A[5,5]的内存单元中,则元素。
A.1175B.1180C.1205D.1210
A[N,N]是对称矩阵,将下面三角(包括对角线)以行序存储到一维数组T[N(N+1)/2]5.
对应T[k]的下标k是(中,则对任一上三角元素)。
a[i][j]
(i-1)/2+j(j-i)/2+1((j-1)/2+ii-1)/2+1D.jB.jA.iC.i
j沿用数组r存储静态链表,结点的next域指向后继,工作指针j指向链中结点,使6.
()链移动的操作为。
A.j=r[j].nextB.j=j+1D.j=r[j]->nextC.j=j->next
对稀疏矩阵进行压缩存储目的是()。
7.
A.便于进行矩阵运算.便于输入和输出B
.节省存储空间C.降低运算的时间复杂度D
LS=((a,b,c),(d,e,f)),函数取出LS中原子运用head和taile的运算是已知广义表8.
。
)(
A.head(tail(LS))B.tail(head(LS))
C.head(tail(head(tail(LS)))D.head(tail(tail(head(LS))))
广义表((a,b,c,d),表尾是())的表头是()。
9.
(a,b,c,d(b,c,d)())D.C.A.aB.
L=((a,b,c)),则L的长度和深度分别为(设广义表)。
10.
和31和和和32B.1C.1A.1D.211.下面说法不正确的是()。
A.广义表的表头总是一个广义表B.广义表的表尾总是一个广义表
C.广义表难以用顺序存储结构D.广义表可以是一个多层次的结构二、填空题
存储结构来存放数组___________1.通常采用。
对二维数组可有两种存储方法:
一种是以
___________为主序的存储方式。
为主序的存储方式,另一种是以___________
A[i,j]2.用一维数组B与列优先存放带状矩阵A中的非零元素≤≤i+2),Bj≤≤n,i-2i(1___行,第_A个元素是中的第8中的第列的元素。
B[1..n*/2](n+1)列的下三角矩阵3.设nn行已压缩到一维数组A中,若按行为主序存A[i,j]对应的B中存储位置为_______。
储,则_4.所谓稀疏矩阵指的是。
5.广义表简称表,是由零个或多个原子或子表组成的有限序列,原子与表的差别仅在于_____________。
为了区分原子和表,一般用表示表,用
表示原子。
一个表的长度是指,而表的深度是指______
L=((),()),head(L);tail(L).设广义表6是是;则的长度是L__;深度是。
7.基于三元组的稀疏矩阵转置的处理方法有两种,A的列序来进行转置,以下运算按照矩阵
请在___________处用适当的句子用以填充。
Trans_Sparmat(SpMatrixTpa,SpMatrixTp*b)
{(*b).mu=a.nu;(*b).nu=a.mu;(*b).tu=a.tu;
if(a.tu){q=1;
for(col=1;___________;col++)
for(p=1;p<=a.tu;p++)
if(___________==col)
{(*b).data[q].i=a.data[p].j;(*b).data[q].j=a.data[p].i;
(*b).data[q].v=a.data[p].v;
___________;
}
}例如原来广义表为((a,b),c,(d,e)),下面是一个将广义表逆置的过程。
完善下列程序。
经8.
))。
b,a(),c,e,d逆置后为:
((
typedefstructglistnode
{inttag;
structglistnode*next;
union{chardata;
struct{structglistnode*hp,*tp;}ptr;
}val;
}*glist,gnode;glistreverse(p)
glistp;
{glistq,h,t,s;if(p==NULL)q=NULL;
else
{if
(1){q=(glist)malloc(sizeof(gnode));q->tag=0;
q->val.data=p->val.data;}
else{
(2)if(3)
{t=reverse(p->val.ptr.tp);s=t;
while(s->val.ptr.tp!
=NULL)s=s->val.ptr.tp;
s->val.ptr.tp=(glist)malloc(sizeof(gnode));
s=s->val.ptr.tp;s->tag=1;s->val.ptr.tp=NULL;s->val.ptr.hp=h;(4)__}else{q=(glist)malloc(sizeof(gnode));q->tag=1;
q->val.ptr.tp=NULL;(5);}
}}
return(q);}
三、应用题
78,每个元素的长度为数组A[1..8,-2..6,0..6]以行为主序存储,设第一个元素的首地址是1.
A[4,2,3]的存储首地址。
4,试求元素
特殊矩阵和稀疏矩阵哪一种压缩存储后失去随机存取的功能?
为什么?
2.
3.数组,广义表与线性表之间有什么样的关系?
(aB(1:
3n-2))n*n4.,将其三条对角线上的元素逐行地存于数组中,使得设有三对角矩阵ijB[k]=a,求:
ij)用(1的下标变换公式;ki,j表示
(2)用表示i,jk的下标变化公式。
5.画出下面广义表的两种存储结构图示:
((((a),b)),(((),d),(e,f)))
6.求下列广义表运算的结果:
(1)HEAD[((a,b),(c,d))];
(2)TAIL[((a,b),(c,d))];)(3TAIL[HEAD[((a,b),(c,d))]];)(4HEAD[TAIL[HEAD[((a,b),(c,d))]]];
)5(TAIL[HEAD[TAIL[((a,b),(c,d))]]];
7.利用广义表的L1=分别从下列广义表中分离出来,和TaildHead运算,把原子(((((a),b),d),e));L2=(a,(b,((d)),e))。
四、算法设计题1.并设A[i,j]≤A[i,j+1](aA[a..b,c..d],矩阵给定nxm≤A[i,j]和≤d-1)i≤≤b,c≤j
设计一算法判定X的值是否在A中,要求时间复杂度为d).i≤≤A[i+1,j](a≤j≤b-1,c
。
O(m+n)
个整数。
写出算设二维数组2.a[1..m,1..n]含有m*n
(1)法:
判断a中所有元素是否互不相同(yes/no)输出相关信息?
;
(2)试分析算法的时间复杂度。
3.设A[1..100]是一个记录构成的数组,B[1..100]是一个整数数组,其值介于1至100之
A[1]中记录的次序,比如当的内容调整B[1]=llB[1..100]A间,现要求按时,则要求将
中去。
规定可使用的附加空间为的内容调整到A[11]。
O
(1)
.稀疏矩阵用三元组的表示形式,试写一算法实现两个稀疏矩阵相加,结果仍用三元组表4示。
5.试编写建立广义表存储结构的算法,要求在输入广义表的同时实现判断、建立。
设广义n=0,,(表按如下形式输入a,a,a或为单字母表示的原子或为广义表,),aan>=0,其中i321n
时为只含空格字符的空表。
第5章数组和广义表
一、单项选择题
1.C
2.C
3.A
4.A
5.B
6.A
7.C
8.C
9.C
10.C
11.A
二、填空题
1.顺序、列序、行序
2.第1行第3列
3.i(i-1)/2+j(1<=i,j<=n)
4.非零元很少(t< 5. (1)原子(单元素)是结构上不可再分的,可以是一个数或一个结构;而表带结构,本质就是广义表,因作为广义表的元素故称为子表。 )表中元素的个数(4(3)小写字母 (2)大写字母()表展开后所含括号的层数5 (2)(())(6. (1)()3)2(4)2 7.col<=a.nu,a.data[p].j,q++ (p->tag==0)1)8.(处理原子// (2)h=reverse(p->val.ptr.hp)处理表头// (p->val.ptr.tp))(3产生表尾的逆置广义表// s->val.ptr.tp=t;(4)连接// q->val.ptr.hp=h)(5头结点指向广义表// 三、应用题 1.958三维数组以行为主序存储,其元素地址公式为: LOC(A)=LOC(A)+[(i-c)VV+(j-c)V+(k-c)]*L+13ijk33c1c2c3212是一个元素所占的存储,d其中c是各维的下界和上界,V=d-c+1是各维元素个数,L iiiii 单元数。 2.特殊矩阵指值相同的元素或零元素在矩阵中的分布有一定规律,因此可以对非零元素分 配单元(对值相同元素只分配一个单元),将非零元素存储在向量中,元素的下标i和j和 该元素在向量中的下标有一定规律,可以用简单公式表示,仍具有随机存取功能。 而稀疏矩 阵是指非零元素和矩阵容量相比很小(t< 用十字链表作存储结构 自然失去了随机存取的功能。 即使用三元组表的顺序存储结构,存取下标为i和j的元素时, 要扫描三元组表,下标不同的元素,存取时间也不同,最好情况下存取时间为,最差O (1) ,因此也失去了随机存取的功能。 情况下是O(n) 3.数组是具有相同性质的数据元素的集合,同时每个元素又有唯一下标限定,可以说数组 是值和下标偶对的有限集合。 n维数组中的每个元素,处于n个关系之中,每个关系都 是线性的,且n维数组可以看作其元素是n-1维数组的一个线性表。 广义表中的元素, 可以是原子,也可以是子表,即广义表是原子或子表的有限序列,满足线性结构的特性: 在非空线性结构中,只有一个称为“第一个”的元素,只有一个成为“最后一个”的元 素,第一元素有后继而没有前驱,最后一个元素有前驱而没有后继,其余每个元素有唯 一前驱和唯一后继。 从这个意义上说,广义表属于线性结构。 4.三对角矩阵第一行和最后一行各有两个非零元素,其余每行均有三个非零元素,所以共有3n-2个元素。 (1)主对角线左下对角线上的元素下标间有i=j+1关系,k与i和j的关系为k=3(i-1);j的关系为k=3(i-1)+1;主对角线右上那条对和与i主对角线上元素下标间有关系i=j,k 角线上元素下标间有关系i=j-1的关系为k=3(i-1)+2j。 综合以上三等式,有和ik与, k=2(i-1)+j(1<=i,j<=n,|i-j|<=1)k/3//k/3i=k/3+1 (2))3n-2k≤;(1≤的最大整数。 下同取小于 j=k-2(i-1)=k-2(k/3)=k%3+k/3 .5 第一种存储结构 第二种存储结构 6.HEAD[((a,b),(c,d))];(a,b)) (1)(2TAIL[((a,b),(c,d))];((c,d)))(3TAIL[HEAD[((a,b),(c,d))]];(b))4(HEAD[TAIL[HEAD[((a,b),(c,d))]]];b)(5TAIL[HEAD[TAIL[((a,b),(c,d))]]];(d) 7.Head(Tail(Head(Head(L1)))) Head(L2))))))Tail((Head(Head(Head(Tail 四、算法设计题 1..[题目分析]矩阵中元素按行和按列都已排序,要求查找时间复杂度为O(m+n),因此 i=a,j=d不能采用常规的二层循环的查找。 可以先从右上角()元素与x比较,只有三种情 ,下步应向iA[i,j] 一是 A[i,j]=x方向查找;三是,查找成功。 否则,若下标已超出范围,则查找失败。 voidsearch(datatypeA[][],a,b,c,d,datatypex)int //n*m矩阵A,行下标从a到b,列下标从x是否在矩阵c到d,本算法查找.A中 {i=a;j=d;flag=0;//flagx的标志是成功查到 while(i<=b&&j>=c)if(A[i][j]==x){flag=1;break;} else(A[i][j]>x)j--;ifelsei++; //假定x为整型.if(flag)printf(“A[%d][%d]=%d”,i,j,x); “矩阵A中无%d元素”,x)elseprintf(; }算法search结束。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第五 数组 广义 习题 数据结构
![提示](https://static.bdocx.com/images/bang_tan.gif)