中北大学数据结构习题.docx

上传人:b****8 文档编号:9347304 上传时间:2023-02-04 格式:DOCX 页数:33 大小:238.43KB
下载 相关 举报
中北大学数据结构习题.docx_第1页
第1页 / 共33页
中北大学数据结构习题.docx_第2页
第2页 / 共33页
中北大学数据结构习题.docx_第3页
第3页 / 共33页
中北大学数据结构习题.docx_第4页
第4页 / 共33页
中北大学数据结构习题.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

中北大学数据结构习题.docx

《中北大学数据结构习题.docx》由会员分享,可在线阅读,更多相关《中北大学数据结构习题.docx(33页珍藏版)》请在冰豆网上搜索。

中北大学数据结构习题.docx

中北大学数据结构习题

《算法与数据结构》习题

第一到三章习题

选择题

1.对于顺序存储的线性表,访问结点和增加、删除结点的时间复杂度为(C)0A.O(n)O(n)B.O(n)O

(1)C.O

(1)O(n)D.O

(1)O

(1)

2.非空的循环单链表head的尾结点p满足(A)。

A.P->next=headB.P->next=NILC,p=NILD,p=head

3.在单链表指针为p的结点之后插入指针为s的结点,正确的操作是:

(B)o

A.p->next=s;s->next=p->next;Bs->next=p->next;p->next=s;

C.p->next=s;p->next=s->next;Dp->next=s->next;p->next=s;

4.在双向链表指针p的结点前插入一个指针q的结点操作是(C)注:

双向链表的结点结构为(pre,data,next)。

A.p->pre=q;q->next=p;p->pre->next=q;q->pre=q;

B.p->pre=q;p->pre->next=q;q->next=p;q->pre=p->pre;

C.q->next=p;q->pre=p->pre;p->pre->next=q;p->pre=q;

D.q->pre=p->pre;q->next=q;p->pre=q;p->pre=q;

5.栈的特点是(①B),队列的特点是(②A),栈和队列都是(A③A)。

若进栈序列为1,2,3,4则(④C)不可能是一个出栈序列(不一定全部进栈后再出栈);若进队列的序列为1,2,3,4则(⑤E)是一个出队列序列。

①,②:

A.先进先出B.后进先出C.进优于出D.

出优于进

③:

A.顺序存储的线性结构B.链式存储的线性结构

C.限制存取点的线性结构D.限制存取点的非线性结构

④,⑤:

A.3,2,1,4B.3,2,4,1C.4,2,3,1D.4,3,2,1E.

1,2,3,4F.1,3,2,4

6.一个栈的输入序列为123,n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是(B)。

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

7.若一个栈的输入序列为1,2,3,,,n,输出序列的第一个元素是i,则第j个

输出元素是(D)。

A.i-j-1B.i-jC.j-i+1D.不确定的

8.若一个栈以向量V[1..n]存储,初始栈顶指针top为n+1,则下面x进栈的正确操作是(C)。

A.top:

=top+1;V[top]:

=xB.V[top]:

=x;top:

=top+1

C.top:

=top-1;V[top]:

=xD.V[top]:

=x;top:

=top-1

9.表达式a*(b+c)-d的后缀表达式是(B)。

A.abcd*+-B.abc+*d-C.abc*+d-D.-+*abcd

10.表达式3*2A(4+2*2-6*3)-5求值过程中当扫描到6时,对象栈和算符栈为

(D),其中a为乘幕0

A.3,2,4,1,1;*a(+*-B.3,2,8;*A-

B.C.3,2,4,2,2;*a(-d.3,2,8;*a(-

11.循环队列存储在数组A[0..m]中,则入队时的操作为(D)。

A.rear=rear+1B.rear=(rear+1)mod(m-1)

C.rear=(rear+1)modmD.rear=(rear+1)mod(m+1)

12.设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,一个元素出栈后即进队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1则栈S的容量至少应该是(C)。

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

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

分别为多少?

(B)

解析:

Q.front=(Q.front+1)%Q.queuesize;

Q.rear=(Q.rear+1)%Q.queuesize;

A.1和5B.2

C.4

14.循环队列A[0..m-1]存放其元素值,用

则当前队列中的元素数是(A)0

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

和2D.5和1

front和rear分别表示队头和队尾,

C.rear-front-1D.

rear-front

当队列非空时,可执行如下的出队操作:

当队列非满时,可执行如下的入队操作:

应用题

1.在程序设计中,可采用下列三种方法实现输出和输入:

⑴通过scanf和printf语句;

(2)通过函数的参数显式传递;

(3)通过全局变量隐式传递。

试讨论这三种方法的优缺点。

答:

(1)用scanf和printf直接进行输入输出的好处是形象、直观,但缺点是需要对其进行格式控制,较为烦琐,如果出现错误,则会引起整个系统的崩溃。

⑵通过函数的参数传递进行输入输出,便于实现信息的隐蔽,减少出错的可能(3)通过全局变量的隐式传递进行输入输出最为方便,只需修改变量的值即可,但过多的全局变量使程序的维护较为困难。

2.线性表有两种存储结构:

一是顺序表,二是链表。

(1)如果有n个线性表同时并存,并且在处理过程中各表的长度会动态变化,线性表的总数也会自动地改变。

在此情况下,应选用哪种存储结构?

为什么?

(2)若线性表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度

存取线性表中的元素,那么应采用哪种存储结构?

为什么?

答:

(1)选链式存储结构。

它可动态申请内存空间,不受表长度(即表中元素

个数)的影响,插入、删除时间复杂度为O

(1)

(2)选顺序存储结构。

顺序表可以随机存取,时间复杂度为O

(1)

3.设pa,pb分别指向两个带头结点的有序(从小到大)单链表。

仔细阅读如下的程序,并回答问题:

(1)程序的功能。

(2)s1,s2中值的含义。

(3)pa,pb中值的含义。

答:

Voidexam(node*pa,node*pb)

{node*p,*p1,*p2;ints1,s2;

p1=pa->next;p2=pb->next;pa->next=null;s1=0;s2=0;

While(p1&&p2)

{if(p1->datadata)

{p=p1;p1=p1->next;s2=s2+1;delete(p)};

elseif(p1->data>p2->data)p2=p2->next;

else(p1->data==p2->data)

{p=p1;p1=p1->next;p->next=pa->next;

pa->next=p;p2=p2->next;s1=s1+1;};

}

While(p1){p=p1;p1=p1->next;delete(p);s2=s2+1}

}

解:

本程序段功能是将pa和pb链表中的值相同的结点保留在pa链表中(pa中与pb中不同结点删除),pa是结果链表的头指针。

链表中结点值与从前逆序。

S1记结果链表中结点个数(即pa与pb中相等的元素个数)。

S2记原pa链表中删除的结点个数。

算法题

1.写出下图双链表中对换值为23和15的两个结点相互位置时修改指针的有关

语句。

结点结构为:

(pre,data,next)

解:

设q=p->pre;贝U

q->next=p->next;p->next->pre=q;

p->pre=q->pre;q->pre->next=p;

p->next=q;q->pre=p

2.顺序结构线性表LA与LB的结点关键字为整数。

LA与LB的元素按非递减有序,线性表空间足够大。

试给出一种高效算法,将LB中元素合到LA中,使新的LA

的元素仍保持非递减有序。

高效指最大限度的避免移动元素。

解:

VoidUnion(seqlistLA,seqlistLB)

{m=LA.length;n=LB.length;k=m+n-2;i=m-1;j=n-1;

while(i>=0&&j>=0)

{if(LA.elem[i]>=LB.elem[j])

{LA.elem[k]=LA.elem[i];k=k-1;i=i-1;}

else{LA.elem[k]=LB.elem[j];k=k-1;j=j-1;}

}

while(j>=0){LA.elem[k]=LB.elem[j];k=k-1;j=j-1;}}

3.给定一个带表头结点的单链表,设head为头指针,结点的结构为

(data,next),data为整型元素,next为指针;试写出算法:

按递增次序输出单链

表中各结点的数据元素,并释放结点所占的存储空间。

(要求;不允许使用数组

作辅助空间)

解:

voidMiniDelete(LinkedListhead)

{LinkedList*pre,*p,*u;

while(head->next!

=null)//循环到仅剩头结点。

{pre=head;p=pre->next;//p为工作指针,pre为最/4值的前驱

while(p->next!

=null)

{if(p->next->datanext->data)pre=p;

p=p->next;}//记住当前最小值结点的前驱

print(%2d,pre->next->data);//输出最小值。

u=pre->next;pre->next=u->next;free(u);//删除最小结点

}

free(head);//释放头结点。

}

4,试写一算法在带头结点的单链表结构上实现线性表操作Locate(L,x);

解:

intLocateElem_L(LinkList&L,ElemTypex)

{

inti=0;

LinkListp=L;

while(p&&p->data!

=x){

p=p->next;

i++;

}

if(!

p)return0;

elsereturni;

}5,已知单链表中的元素以值递增有序排列。

试写一高效的算法,删除表中所有值大于mink且小于maxk的元素,同时释放被删结点空间。

解:

pre

匚[

umaxk^=maL?

cl<

pre-^itext=p二

voiddelete(LinkList&L,intmink,intmaxk){p=L->next;

while(p&&p->data<=mink)

{pre=p;p=p->next;}//查找第一个值>mink的结点

if(P){

while(p&&p->datanext;

//查找第一个值>maxk的结点

q=pre->next;pre->next=p;//修改指针

while(q!

=p)

{s=q->next;deleteq;q=s;}//释放结点空间

}

}//delete6.试写一高效的算法,删除表中所有值相同的多余元素(使得操作后的线性表中所有元素的值均不相同),同时释放被删结点空间,并分析你的算法的时间复杂度。

已知一个非纯集合B,试构造一个纯集合A,使A中只包含B中所有值各不相同的数据元素

从集合B取出物件放入集合A

要求集合A中同样物件不能有两件以上

因此,算法的策略应该和例2-1基本相同,差别仅在于集合A的初始状态是“空集”

voidunion(List&La,ListLb){

InitList(La);//构造(空的)线性表LA

La_len=ListLength(La);Lb_len=ListLength(Lb);

for(i=1;i<=Lb_len;i++){

GetElem(Lb,i,e);//取Lb中第i个数据元素赋给e

if(!

LocateElem(La,e,equal()))

ListInsert(La,++La_len,e);

//LaG未存在和e相同的数据元素,则插入之

}//for

}//union

例如:

(2,3,3,5,6,6,6,8,12)

对集合B而言,

值相同的数据元素必定相邻

对集合A而言,

数据元素依值从小至大的顺序插入

因此,数据结构改变了,

解决问题的策略也相应要改变。

voidpurge(List&La,ListLb){

InitList(LA);La_len=ListLength(La);

Lb_len=ListLength(Lb);//求线性表的长度

for(i=1;i<=Lb_len;i++){

GetElem(Lb,i,e);//取Lb中第i个数据元素赋给e

if(ListEmpty(La)||!

equal(en,e)){

ListInsert(La,++La_len,e);en=e;

}//La中不存在和e相同的数据元素,则插入之

}//for

}//purge

第四章串习题

1.下面关于用的的叙述中,哪一个是不正确的?

(B)

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

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

式存储

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

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

3.用'ababaaababaa'的next数组为(C)。

A.012345678999B.012121111212C.011234223456D.0123012322345

4.字符用'ababaabab'的nextval为(A)

A.(0,1,0,1,0,4,1,0,1)B.(0,1,0,1,0,2,1,0,1)

C.(0,1,0,1,0,0,0,1,1)D.(0,1,0,1,0,1,0,1,1)

5、设字符用S='aabaabaabaac',T='aabaac'

(1)给出S和T的next值和nextval值;

(2)若S作主用,T作模式用,试给出利用BF算法和KMPJ法的匹配过程。

解:

(1)S的next与nextval值分另为012123456789和002002002009;

t的next与nextval值分别为012123和002003。

(2)利用BF算法的匹配过程:

第——趟匹酉己:

aabaabaabaac

aabaac(i=6,j=6)

aabaac(i=6,j=6)

第二趟匹酉己:

aabaabaabaacaa(i=3,j=2)

(aa)baac

第三趟匹酉己:

aabaabaabaaca(i=3,j=1)

(成功)(aa)baac

第四趟匹酉己:

aabaabaabaacaabaac(i=9,j=6)

第五趟匹酉己:

aabaabaabaacaa(i=6,j=2)

第六趟匹酉己:

aabaabaabaaca(i=6,j=1)

第七趟匹酉己:

aabaabaabaac

利用KMPJ法的匹配过程:

第——趟匹酉己:

aabaabaabaac

第二趟匹酉己:

aabaabaabaac

第三趟匹酉己:

aabaabaabaac

成功)

aabaac(i=13,j=7)

第6章树和二叉树习题

选择题

1、已知一算术表达式的中缀形式为A+B*C-D/E,后缀形式为ABC*+DE/-,其前缀形式为(D)

A.-A+B*C/DEB.-A+B*CD/E

C.-+*ABC/DED.-+A*BC/DE

2、设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1,M2和

M3与森林F对应的二叉树根结点的右子树上的结点个数是(D)。

A.M1

B.M1+M2C

.M2+M3

3、有关二叉树下列说法正确的是(

A.二叉树的度为2

B.一棵二叉树白度可以小于2

C.二叉树中至少有一个结点的度为

D.二叉树中任何一个结点的度都为4、二叉树的第I层上最多含有结点数为(C)

A.2IB.2I-1-1C.2I-1D.2I-15、一个具有1025个结点的二叉树的高八为(C)

10至1024之间

A.11B.10C.11至1025之间D

解析:

具有n

6、高度为K的二叉树最大的结点数为(C)。

A.2kB.2k-1C.2k-1D.2k-1-1

7、利用二叉链表存储树,则根结点的右指针是(C)。

A.指向最左孩子B.指向最右孩子

C.空D.非空

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

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

9、某二叉树中序序列为A,B,C,D,E,F,G,后序序列为B,D,C,A,F,G,E则先序序列是:

B

A.E,G,F,A,C,D,BB.E,A,C,B,D,G,FC.E,A,G,C,F,B,DD.上面的都不对

10、上题的二叉树对应的森林包括多少棵树(B)

A.lB.2C.3D.概念上是错误的

11、一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树

一定满足(C)

A.所有的结点均无左孩子B.所有的结点均无右孩子

C.只有一个叶子结点D.是任意一棵二叉树

12、在二叉树结点的先序序列,中序序列和后序序列中,所有叶子结点的先后

顺序(B)

A.都不相同B.完全相同

C.先序和中序相同,而与后序不同D.中序和后序相同,而与先序不同13、在完全二叉树中,若一个结点是叶结点,则它没(C)。

A.左子结点B.右子结点

C.左子结点和右子结点D.左子结点,右子结点和兄弟结点

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

A.2nB.n-lC.n+1D.n

(解析:

一棵n结点树包含n-1条边,而每个结点有两个指针域即总共2n个指针,减去表示

边的指向关系(即左右子树)的n-1条边,剩下n+1条边即为线索。

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

A.(00,01,10,11)B.(0,1,00,11)

C.(0,10,110,111)D.(1,01,000,001)

(解析:

一组编码中任何一个编码均不为其他编码的前缀.避免了多义性,且缩短了报文总

长)

16、在下述结论中,正确的是(D)

①只有一个结点的二叉树的度为0;②二叉树的度为2;③二叉树的左右子树可任意交换;④深度为K的完全二叉树的结点个数小于或等于深度相同的满二叉树。

A.①②③B.②③④C.②④D.①④

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

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

(解析:

任意一棵二叉树,度为零的节点即叶子节点的数比度为二的节点多一。

)18、具有10个叶结点的二叉树中有(B)个度为2的结点

A.8B.9C.10D.1l

19、一棵完全二叉树上有1001个结点,其中叶子结点的个数是(D)

(1023是满二叉树,有512片叶子。

1001比1023少22个结点,所以有512-22+22/2=501片叶子。

511是满二叉树,有256片叶子。

1001比511多490个结点,所以有256+490-(490+1)/2=501片叶子。

所以答案就是501了。

A.250B.500C.254D.501

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

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

21、二叉树的先序遍历和中序遍历如下:

先序遍历:

EFHIGJK中序遍历:

HFIEJKG。

该二叉树根的右子树的根是(C)。

A、EB、FC、GD、H

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

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

23、用一维数组存储二叉树时,总是以(D)遍历顺序存储结点

A.先序B.中序C.后序D,按层次遍历

24、对一棵二叉树进行层次遍历时,应借助于一个(D)。

A.顺序表B.数组C.栈D.队列

25、某二叉树的先序序列和后序序列正好相反,则该二叉树一定是(C)的二叉

树。

A.空或只有一个结点B.任一结点无左子树C,高度等于其结点数D.任一结点无右子树

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

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

(设度为0的结点数为n0,度为1的结点数为n1,度为2的结点数为n2,度为3的结点数为n3,度为4的结点数为n4,那么这棵树总的结点数为n0+n1+n2+n3+n4;又因为树中的每个结

点(除了根结点外)都有一个指针指向它,那么这棵树总的结点数为总的指针数加上1;

总的指针数=1*n1+2*n2+3*n3+4*n4;故有:

1+1*n1+2*n2+3*n3+4*n4=n0+n1+n2+n3+n4;从而有

n0=1+n2+2*n3+3*n4=1+2+2*1+3*1=8;)

27、将一棵树t转换为孩子一兄弟链表表示的二叉树h,则t的后根序遍历是h的(B)

A.先序遍历B.中序遍历C.后序遍历

28、某二叉树T有n个结点,设按某种顺序对T中的每个结点进行编号,编号为1,2,,,n,且有如下性质:

T中任一结点V,其编号等于左子树上的最小编号减1,而V的右子树的结点中,其最小编号等于V左子树上结点的最大编号加1。

这时是按(B)编号的。

A.中序遍历序列B.先序遍历序列C.后序遍历序列D.层次顺序

应用题

1、从概念上讲,树,森林和二叉树是三种不同的数据结构,将树,森林转化为二叉树的基本目的是什么,并指出树和二叉树的主要区别。

答:

树的孩子兄弟链表表示法和二叉树二叉链表表示法,本质是一样的,只是解释不同,也就是说树(森林的特例)可用二叉树唯一表示,并可使用二叉树的一些算法去解决树和森林中的问题。

树和二叉树的区别有:

一是二叉树的度至多为2,树无此限制;二是二叉树有左右子树之分,即使在只有一个分枝的情况下,也必须指出是左子树还是右子树,树无此限制。

2、试找出满足下列条件的二叉树

1)先序序列与后序序列相同;2)中序序列与后序序列相同;3)先序序列与中序序列相同;

1)、既不含左子树,也不含右子树的二叉树。

2)、不含右子树的二叉树。

3)、不含左子树的二叉树。

3、已知一棵度为k的树中有ni个度为1的结点,奥个度为2的结点,一①个度为k的结点,问该树中有多少个叶子结点?

解:

根据树的定义,在一颗树中,除树根结点外,每个结点有且仅有一个前驱结点,也就是说,每个结点与指向它的一个分支一一对应,所以除树根结点之外的结点树等于所有结点的分支数,即度数,从而可得树中的结点数等于所有结点的度数加1。

总结点数为

1n12n23n3…knk

而度为0的结点数就应为总结点数减去度不为0的结点数的总和,即

k

n0=1n12n23n3...knk-(n〔n2n3…nk)=1%(i—1)n

i-J

5、用一维数组存放的一棵完全二叉树如下图所示:

A

B

C

D

E

F

G

H

I

J

K

L

写出后序遍历该二叉树时访问结点的顺序。

解析:

用一维数组存储二叉树时,总是以层次遍历顺序存储结点

答:

HIDJKEBLFGCA

6、对下图所示二叉树分别按先序、中序、后序遍历,给出相应的结点序列,同时给二叉树加上中序线索。

(1)先序序列:

ABDEHCFG

(2)中序序列:

DHEBAFCG

(3)后序序列:

HEDBFGCA

A

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

Cnull

ABDFCEGH中

A

序遍历JWhBFDAGEHC

(1)画出这棵二叉树。

(2)将这棵二叉树转换成对应的树(或森林)

尸"

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

当前位置:首页 > 解决方案 > 学习计划

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

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