数据结构练习题答案Word文件下载.docx

上传人:b****6 文档编号:17543428 上传时间:2022-12-07 格式:DOCX 页数:22 大小:122.08KB
下载 相关 举报
数据结构练习题答案Word文件下载.docx_第1页
第1页 / 共22页
数据结构练习题答案Word文件下载.docx_第2页
第2页 / 共22页
数据结构练习题答案Word文件下载.docx_第3页
第3页 / 共22页
数据结构练习题答案Word文件下载.docx_第4页
第4页 / 共22页
数据结构练习题答案Word文件下载.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

数据结构练习题答案Word文件下载.docx

《数据结构练习题答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构练习题答案Word文件下载.docx(22页珍藏版)》请在冰豆网上搜索。

数据结构练习题答案Word文件下载.docx

(B)。

A.p->

next=s;

s->

next=p->

next;

B.s->

p->

C.p->

next=s->

D.p->

10、对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是(B)

A.head==NULLB.head→next==NULLC.head→next==headD.head!

=NULL

11、一个栈的输入序列为123…n,若输出序列的第一个元素是n,输出第i(1<

=n)个元素是(B)。

A.不确定B.n-i+1C.iD.n-i

12、有六个元素6,5,4,3,2,1的顺序进栈,问下列哪一个不是合法的出栈序列?

(C)

A.543612B.453126C.346521D.234156

13、设有三个元素X,Y,Z顺序进栈(进的过程中允许出栈),下列得不到的出栈排列是(C)。

A.XYZB.YZXC.ZXYD.ZYX

14、假设以数组A[m]存放循环队列的元素,其头尾指针分别为front和rear,则当前队列中的元素个数为(A)。

A.(rear-front+m)%mB.rear-front+1C.(front-rear+m)%mD.(rear-front)%m

15、若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少?

(B)

A.1和5B.2和4C.4和2D.5和1

16、下面关于串的的叙述中,哪一个是不正确的?

(B)

A.串是字符的有限序列B.空串是由空格构成的串

C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储

17、设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为(C)

A.求子串B.联接C.匹配D.求串长

18、设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为(B)。

A.BA+141B.BA+180C.BA+222D.BA+225

19、已知广义表L=((x,y,z),a,(u,t,w)),从L表中取出原子项t的运算是(D)。

A.head(tail(tail(L)))B.tail(head(head(tail(L))))

C.head(tail(head(tail(L))))D.head(tail(head(tail(tail(L)))))

20、广义表A=(a,b,(c,d),(e,(f,g))),则下面式子的值为(D)。

Head(Tail(Head(Tail(Tail(A)))))

A.(g)B.(d)C.cD.d

二、判断题

1、数据元素是数据的最小单位。

(×

2、算法可以用不同的语言描述,如果用C语言或PASCAL语言等高级语言来描述,则算法实际上就是程序了。

(Y)

3、顺序存储方式的优点是存储密度大,且插入、删除运算效率高。

4、线性表采用链表存储时,结点和结点内部的存储空间可以是不连续的。

(×

5、线性表的特点是每个元素都有一个前驱和一个后继。

6、一个稀疏矩阵Am*n采用三元组形式表示,若把三元组中有关行下标与列下标的值互换,并把m和n的值互换,则就完成了Am*n的转置运算。

7、所谓取广义表的表尾就是返回广义表中最后一个元素。

三、填空题

1、数据的物理结构包括数据元素的表示和关系的表示。

2、当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素时,应采用___顺序__存储结构。

3、线性表L=(a1,a2,…,an)用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是_(n-1)/2____。

4、对于一个具有n个结点的单链表,在已知的结点*p后插入一个新结点的时间复杂度为__O

(1)__,在给定值为x的结点后插入一个新结点的时间复杂度为___O(n)_____。

5、带头结点的双循环链表L中只有一个元素结点的条件是:

__L->

next->

next==L__

6、一个栈的输入序列是:

1,2,3则不可能的栈输出序列是__312___。

7、用S表示入栈操作,X表示出栈操作,若元素入栈的顺序为1234,为了得到1342出栈顺序,相应的S和X的操作串为_SXSSXSXX__。

8、__队列__又称作先进先出表。

9、组成串的数据元素只能是__字符___。

10、设有C语言描述的二维数组A[10][20],其每个元素占两个字节,第一个元素的存储地址为100,若按行优先顺序存储,则元素A[6][6]存储地址为__352__。

四、算法与应用题

1.设线性表存放在向量A[arrsize]的前elenum个分量中且递增有序,试写一算法将x插入到线性表的适当位置,以保持线性表的有序性并分析其时间复杂度。

#definearrsize100

boolsortinsert(ElemtypeA[],intelenum,Elemtypex)

{

inti;

if(elenum==arrsize)

printf(“该数组向量已满”);

returnfalse;

}

i=elenum-1;

while(A[i]>

x&

&

i>

=0)

A[i+1]=A[i];

i--;

A[i+1]=x;

returntrue;

}//写的还是比较粗糙,有待进一步改进//2005年4月19日

2.已知带头结点的动态单链表L中的结点是按整数值递增排列的,试写一算法将值x为的结点插入到表L中,使L仍然有序。

///线性表的单链表存储结构

typedefstructLnode

{ElemTypedata;

structLnode*next;

}LNode,*LinkList;

LinkListsortinsert(LinkListL,intx)/*带头结点*/

{

LinkListp,q,s;

s=(LinkList)malloc(sizeof(LNode));

if(!

s){printf(“动态空间分配不成功”);

exit(-1);

data=x;

q=L;

p=L->

while(p!

=NULL&

p->

data<

x)

{

q=p;

p=p->

s->

next=q->

q->

next=s;

returnL;

3.在长度大于1的单循环链表L中,既无头结点也无头指针。

s为指向链表中某个结点的指针,试编写算法删除结点*s的直接前趋结点。

//条件是长度大于一

#include<

iostream>

usingnamespacestd;

typedefstructLnode

booldelete_prior(LinkLists)

LinkListp;

LinkListq;

q=s;

p=s->

while(p->

next!

=s)

{

q=p;

p=p->

}

q->

next=s;

deletep;

 

五、程序填空题

1、下面是用c语言编写的对不带头结点的单链表进行就地逆置的算法,该算法用L返回逆置后的链表的头指针,试在空缺处填入适当的语句。

voidreverse(linklist&

L){

p=null;

q=L;

while(q!

=null)

{

(1)L=L->

next;

next=p;

p=q;

(2)q=L___;

(3)L=p;

}

2、对单链表中元素按插入方法排序的C语言描述算法如下,其中L为链表头结点指针。

请填充算法中标出的空白处,完成其功能。

(10分)

typedefstructnode

{intdata;

structnode*next;

}linknode,*link;

voidInsertsort(linkL)

{linkp,q,r,u;

(1)L->

next=NULL___;

while(

(2)_p!

=NULL__________)

{r=L;

q=L->

while((3)q!

=NUll_&

data<

=p->

data){r=q;

q=q->

u=p->

(4)_p->

next=q___;

(5)_r->

next=p_;

p=u;

第六章练习

选择题

1.设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1则T中的叶子数为(D)

A.5B.6C.7D.8

2.设森林F对应的二叉树为B,它有m个结点,B的根为p,p的右子树结点个数为n,森林F中第一棵树的结点个数是(A)

A.m-nB.m-n-1C.n+1D.条件不足,无法确定

3.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是(B)

A.9B.11C.15D.不确定

4.具有10个叶结点的二叉树中有(B)个度为2的结点,

A.8B.9C.10D.ll

5.一棵完全二叉树上有1001个结点,其中叶子结点的个数是(E)

A.250B.500C.254D.505E.以上答案都不对

6.有n个叶子的哈夫曼树的结点总数为(D)。

A.不确定B.2nC.2n+1D.2n-1

7.一棵具有n个结点的完全二叉树的树高度(深度)是(A)

A.logn+1B.logn+1C.lognD.logn-1

8.深度为h的满m叉树的第k层有(A)个结点。

(1=<

k=<

h)

A.mk-1B.mk-1C.mh-1D.mh-1

9.在一棵高度为k的满二叉树中,结点总数为(C)

A.2k-1B.2kC.2k-1D.log2k+1

10.对二叉树的结点从1开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,可采用(C)次序的遍历实现编号。

A.先序B.中序C.后序D.从根开始按层次遍历

11.树的后根遍历序列等同于该树对应的二叉树的(B).

A.先序序列B.中序序列C.后序序列

12.已知某二叉树的后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历是(D)。

A.acbedB.decabC.deabcD.cedba

13.二叉树的先序遍历和中序遍历如下:

先序遍历:

EFHIGJK;

中序遍历:

HFIEJKG。

该二叉树根的右子树的根是:

C

A、EB、F C、G D、H

14.对于前序遍历与中序遍历结果相同的二叉树为(F);

对于前序遍历和后序遍历结果相同的二叉树为(B)。

A.一般二叉树B.只有根结点的二叉树C.根结点无左孩子的二叉树

D.根结点无右孩子的二叉树E.所有结点只有左子数的二叉树F.所有结点只有右子树的二叉树

15.一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足(C)

A.所有的结点均无左孩子B.所有的结点均无右孩子C.只有一个叶子结点D.是任意一棵二叉树

16.引入二叉线索树的目的是(A)

A.加快查找结点的前驱或后继的速度B.为了能在二叉树中方便的进行插入与删除

C.为了能方便的找到双亲D.使二叉树的遍历结果唯一

17.n个结点的线索二叉树上含有的线索数为(C)

A.2nB.n-lC.n+lD.n

18.(C)的遍历仍需要栈的支持.

A.前序线索树B.中序线索树C.后序线索树

19.二叉树在线索后,仍不能有效求解的问题是(D)。

A.前(先)序线索二叉树中求前(先)序后继B.中序线索二叉树中求中序后继

C.中序线索二叉树中求中序前驱D.后序线索二叉树中求后序后继

20.由3个结点可以构造出多少种不同的二叉树?

(D)

A.2B.3C.4D.5

21.下述编码中哪一个不是前缀码(B)。

A.(00,01,10,11)B.(0,1,00,11)C.(0,10,110,111)D.(1,01,000,001)

22.从下列有关树的叙述中,选出5条正确的叙述(共5分)(CDFHI)

A.二叉树中每个结点有两个子结点,而树无此限制,因此二叉树是树的特殊情况。

B.当K≥1时高度为K的二叉树至多有2k-1个结点。

C.用树的前序周游和中序周游可以导出树的后序周游。

D.线索二叉树的优点是便于在中序下查找前驱结点和后继结点。

E.将一棵树转换成二叉树后,根结点没有左子树。

F.一棵含有N个结点的完全二叉树,它的高度是LOG2N+1。

G.在二叉树中插入结点,该二叉树便不再是二叉树。

H.采用二叉树链表作树的存储结构,树的前序周游和其相应的二叉树的前序周游的结果是一样的。

I.哈夫曼树是带权路径最短的树,路径上权值较大的结点离根较近。

J.用一维数组存储二叉树时,总是以前序周游存储结点。

判断题

1.完全二叉树中,若一个结点没有左孩子,则它必是树叶。

2.二叉树只能用二叉链表表示。

×

3.在二叉树的第i层上至少有2i-1个结点(i>

=1)×

4.度为二的树就是二叉树。

5.在中序线索二叉树中,每一非空的线索均指向其祖先结点。

填空题:

1.如某二叉树有20个叶子结点,有30个结点仅有一个孩子,则该二叉树的总结点数为__69____。

2.具有256个结点的完全二叉树的深度为__9____。

3.已知一棵度为3的树有2个度为1的结点,3个度为2的结点,4个度为3的结点,则该树有___12___个叶子结点。

4.在一棵二叉树中,度为零的结点的个数为N0,度为2的结点的个数为N2,则有N0=__N2_+1___

5.已知二叉树有50个叶子结点,则该二叉树的总结点数至少是__99____。

6.一个有2001个结点的完全二叉树的高度为__11____。

7.设F是由T1,T2,T3三棵树组成的森林,与F对应的二叉树为B,已知T1,T2,T3的结点数分别为n1,n2和n3则二叉树B的左子树中有__n1-1_个结点,右子树中有_n2+n3__个结点。

作业题

1、给定一组权值2,3,5,7,11,13,17,19,23,29,31,37,41,

(1)试画出用Huffman算法建造的Huffman树;

(2)求平均编码长度()考虑概率

解:

(1)

(2)(7×

(2+3)+6×

5+5×

7+4×

(17+11+13)+3×

(31+37+41+29+19+23))/238

2、.设一棵二叉树的先序、中序遍历序列分别为

先序遍历序列:

ABDFCEGH中序遍历序列:

BFDAGEHC

(1)画出这棵二叉树。

(2)画出这棵二叉树的后序线索树。

(2)

3.二叉树存储结构同上题,以下程序为求二叉树深度的递归算法,请填空完善之。

intdepth(bitreebt)/*bt为根结点的指针*/

{inthl,hr;

if(bt==NULL)return(

(1)_0__);

hl=depth(bt->

lchild);

hr=depth(bt->

rchild);

if(

(2)hl>

hr___)(3)_hr=hl_____;

return(hr+1);

4.线索二叉树有数据域data,左右孩子域lchild和rchild,左右标志ltag及rtag,规定标志为1对应的孩子域是线索,0则为指向孩子的指针。

规定在储存线索二叉树时,完成下面中序线索化过程。

(存储线索二叉树,不增加头结点,只在原有的由tree指向的二叉树中增加线索,此处也不考虑c语言的具体语法与约定,线索化前所有的标志tag都是0)。

/*pre是同tree类型相同的指针,初值是null*/

thread_inorder(tree)

{if(tree!

{thread_inorder(

(1)tree->

lchild____);

if(tree->

lchild==

(2)NULL__){tree->

ltag=1;

tree->

lchild=pre;

if((3)pre->

rchild____==null){(4)pre->

rtag=1__;

(5)pre->

rchild=tree_______;

pre=tree;

thread-inorder((6)tree->

rchild__);

5、已知一棵满二叉树的结点个数为20到40之间的素数,此二叉树的叶子结点有多少个?

(请给出具体的推理过程)

16

6、一棵共有n个结点的树,其中所有分支结点的度均为K,求该树中叶子结点的个数。

7.假设一个二叉树的两种遍历如下:

前序:

ABFGCHDEIJLK中序:

FGBHCDILJKEA

画出这棵二叉树以及它的中序线索树;

第七章练习

1.设无向图的顶点个数为n,则该图最多有(B)条边。

A.n-1B.n(n-1)/2C.n(n+1)/2D.0E.n2

2.一个n个顶点的连通无向图,其边的个数至少为(A)。

A.n-1B.nC.n+1D.nlogn;

3.一个有n个结点的图,最少有(B)个连通分量,最多有(D)个连通分量。

A.0B.1C.n-1D.n

4.在一个无向图中,所有顶点的度数之和等于所有边数(B)倍,在一个有向图中,所有顶点的入度之和等于所有顶点出度之和的(C)倍。

A.1/2B.2C.1D.4

5.下列哪一种图的邻接矩阵是对称矩阵?

(B)

A.有向图B.无向图C.AOV网D.AOE网

6.当一个有N个顶点的图用邻接矩阵A表示时,顶点Vi的度是(B)。

A.

B.

C.

D.

+

7.无向图G=(V,E),其中:

V={a,b,c,d,e,f},E={(a,b),(a,e),(a,c),(b,e),(c,f),(f,d),(e,d)},对该图进行深度优先遍历,得到的顶点序列正确的是(D)。

A.a,b,e,c,d,fB.a,c,f,e,b,dC.a,e,b,c,f,dD.a,e,d,f,c,b

8.下面哪一方法可以判断出一个有向图是否有环(回路):

A.深度优先遍历B.拓扑排序C.求最短路径D.广度优先遍历

9.在图采用邻接表存储时,求最小生成树的Prim算法的时间复杂度为(B)。

A.O(n)B.O(n+e)C.O(n2)D.O(n3)

10.求解最短路径的Floyd算法的时间复杂度为(D)。

A.O(n)B.O(n+c)C.O(n*n)D.O(n*n*n)

11.已知有向图G=(V,E),其中V={V1,V2,V3,V4,V5,V6,V7},

E={<

V1,V2>

<

V1,V3>

V1,V4>

V2,V5>

V3,V5>

V3,V6>

V4,V6>

V5,V7>

V6,V7>

},G的拓扑序列是(A)。

A.V1,V3,V4,V6,V2,V5,V7B.V1,V3,V2,V6,V4,V5,V7

C.V1,V3,V4,V5,V2,V6,V7D.V1,V2,V5,V3,V4,V6,V7

12.若一个有向图的邻接距阵中,主对角线以下的元素均为零,则该图的拓扑有序序列(A)。

A.存在B.不存在

13.一个有向无环图的拓扑排序序列(B)是唯一的。

A.一定B.不一定

14.在有向图G的拓扑序列中,若顶点Vi在顶点Vj之前,则下列情形不可能出现的是(D)。

A.G中有弧<

Vi,Vj>

B.G中有一条从Vi到Vj的路径

C.G中没有弧<

Vi,Vj>

D.G中有一条从Vj到Vi的路径

15.在用邻接表表示图时,拓扑排序算法时间复杂度为(B)。

A.O(n)B.O(n+e)C.O(n*n)D.O(n

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 从业资格考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1