数据结构复习试题.docx

上传人:b****7 文档编号:9035455 上传时间:2023-02-02 格式:DOCX 页数:25 大小:264.97KB
下载 相关 举报
数据结构复习试题.docx_第1页
第1页 / 共25页
数据结构复习试题.docx_第2页
第2页 / 共25页
数据结构复习试题.docx_第3页
第3页 / 共25页
数据结构复习试题.docx_第4页
第4页 / 共25页
数据结构复习试题.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

数据结构复习试题.docx

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

数据结构复习试题.docx

数据结构复习试题

题目选至第7章

一、填空题(2分/题,共10题)

1.数据是指所有能够输入到计算机中被计算机加工、处理的符号的集合。

2.可以把计算机处理的数据,笼统地分成数值型和非数值型两大类。

3.数据的逻辑结构就是指数据间的邻接关系。

10.从整体上看,数据在存储器有两种存放的方式:

一是集中存放在一个连续的存存储区中;一是利用存储器中的零星区域,分散地存放在存的各个地方。

12.“基本操作”是指算法中那种所需时间与操作数的具体取值虽匕的操作。

5.不带表头结点的链表,是指该链表的表头指针直接指向该链表的起始结点。

6.在一个双链表中,已经由指针ptr指向需要删除的存储结点,则删除该结点所要执行的两条操作是①ptr->Prior->Next二ptr->Next;②ptr-〉Next->Prior=ptr->Prior;。

7.设tail是指向非空、带表头结点的循环单链表的表尾指针。

那么,该链表起始结点的存储位置应该表示成tail->Next-〉Next。

9.顺序表Sq=(al,a2,a3,…,an)(n>l)中,每个数据元素需要占用w个存储单元。

若m为元素al的起始地址,那么元素an的存储地址是m+(nT)*w。

1.限定插入和删除操作只能在一端进行的线性表,被称为是栈。

2.如果在顺序栈满时仍打算进行进栈操作,就称为发生了“上溢”出错。

3.如果在顺序栈空时仍打算进行出栈操作,就称为发生了"下溢”出错。

4.在具有n个数据结点的循环队列中,队满时共有n-1个数据元素。

5.如果操作顺序是先让字母A、B、C进栈,做两次出栈;再让字母D、E、F进栈,做一次出栈;最后让字母G进栈,做三次出栈。

最终这个堆栈从栈顶到栈底的余留元素应该是DA。

6.中缀表达式(a+b)~(c/(d+e))对应的后缀表达式是ab*cde+/-。

7.函数的递归调用有两种形式:

如果一个函数是直接调用自己,就称其为直接递归调用;如果一个函数是通过另一个函数来调用自己,就称其为间接递归调用。

8.设某栈的元素输入顺序是1、2、3、4、5,想得到4、3、5、2、1的输出顺序。

那么push、pop的操作序列应该是push、push、push、push、pop、pop、push、pop、pop、pop。

5.设有串s="IamateacherM。

该串的长度是14。

10.在一个n阶方阵A中,若所有元素都有性质:

aij=aji(lWi,jWn),就称其为对称矩阵。

1.结点数为7的二叉树的高度最矮是2,最高是6。

2.给定二叉树的结点数,要使树高为最大,那么该树应该是单枝形状。

3.绐定二叉树的结点数,要使树高为最矮,那么该树应该是完全二叉树形状。

4.如果一棵满二叉树的深度为6,那么它共有127个结点,有64个叶结点。

5.有15个结点的二叉树,最少有1个叶结点,最多有8个叶结点。

6.由n个带权值的叶结点生成的哈夫曼树,最终共有2n-l个结点。

9.深度为5的二叉树,至多有31个结点。

10.在二叉树中,有一个结点具有左、右两个孩子。

那么在中序遍历序列里,它的右孩子一定排在它的右边。

2.在一个具有4个顶点的无向图中,要连通全部顶点,,至少需要3条边。

3.在无向图中,若顶点v,•和Vj之间有一条边(V”V./)存在,那么则称顶点V,和v丿互为邻接点。

4.图中顶点v,的“度”,是指与它相邻接的顶点的个数,并记为D(v「)。

5.在有向图中,把从顶点—到顶点v.,的弧记为,而把从顶点Vj到顶点v,的弧记为,这是两条不同的弧。

6.府二祛石图,其邻接矩阵中.第,行(或第,列)里非篆或非8元素的个数,正好是第,个顶点V,的度。

二、选择题(1分/题,共20题)

1.在常见的数据处理中,_B_是最基本的处理。

A.删除B.查找C.读取D.插入

4.链式存储结构中,每个数据的存储结点里丄指向邻接存储结点的指针,用以反映数据间的逻辑关系。

A.只能有1个B.只能有2个C.只能有3个D.可以有多个

6.有下面的算法段:

for(i=0;i

k++;

其时间复杂度为_L。

A.0

(1)B.0(n)C.f7(log2n)D.0(n‘)

1.下面,对非空线性表特点的论述,£是正确的。

A.所有结点有且只有一个直接前驱

B.所有结点有且只有一个直接后继

C.每个结点至多只有一个直接前驱,至多只有一个直接后继

D.结点间是按照1对多的邻接关系来维系其逻辑关系的

2.一般单链表Lkh为空的判定条件是A<,

A.Lkh==NULL

B.Lkh->Next==NULL

C.Lkh->Next==Lkh

D.Lkh!

=NULL

3.带表头结点的单链表Lkh为空的判定条件是B。

A.Lkh==NULL

B.Lkh->Next==NULL

C.Lkh->Next==Lkh

D.Lkh!

=NULL

4•往一个顺序表的任一结点前插入一个新数据结点时,平均而言,需要移动B个结点。

A.n

B.n/2

C.nA

5.在一个单链表中,已知qtr所指结点是ptr所指结点的直接前驱。

现要在qtr所指结点

和ptr所指结点之间插入一个rtr所指的结点,要执行的操作应该是C

A.

rtr->Next=ptr-〉Next;ptr->Next=rtr;

B.

ptr->Next=

rtr->Next;

C.

qtr->Next

rtr;

rtr->Next=ptr;

D.

rtr;

ptr->Next=

1.一个栈的元素进栈序列是

A・e、d、c.b、a

C・d、c、e.a、b

rtr->Next=qtr->Next;

b、c、d、e,那么下面的丄不能做为一个出栈序列。

B・d、e、c.b、a

D・3、b、c.d、

2.判定一个顺序队列Qs(最多有个元素)

A・Qsrear-Qsfront==n*size

C・Qsfront==Qsrear

3.判定一个顺序队列Qs(最多有/7个元素)

A・Qsrear-Qsfront==n*size

C・Qsfront==Qs.rear

4.在一个链式队列Lq中,Lqfront和Lq_

所指结点要进队,则插入操作应该是Bo

e

为空的条件是丄。

B・Qsrear-Qs

D.Qsfront==Qs真满的条件是A。

B・Qs_rear-Qs

D.Qsfront==Qs

rear分别为队首、队尾指针。

现在由指针ptr

front+1==n*sizerear+size

front+1==n*sizerear+size

A.

Lqfront-〉Next=ptr;

Lqfront=ptr;

B.

Lqrear->Next=ptr;

Lqrear=ptr;

C.

ptr->Next=Lq.rear;

Lqrear=ptr;

D.

ptr->Next=Lqfront;

Lqfront=ptr;

5.链栈与顺序栈相比,一个较为明显的优点是R。

A.通常不会出现栈空的情形B.插入操作更加便利

C.删除操作更加便利D.通常不会出现栈满的情形

6.向链栈插入一个结点时,操作顺序应该是C。

A.先修改栈顶指针,再插入结点—B.无须修改栈顶指针

C.先插入结点,再修改栈顶指针D.谁先谁后没有关系

7.从链栈中删除一个结点时,操作顺序应该是丄。

A.先保存被删结点的值,再修改栈顶指针

B.先修改栈顶指针,再保存被删结点的值

C.无须修改栈顶指针的值

D•谁先谁后没有关系

8.一个循环队列的最大容量为m+1,front为队首指针,rear为队尾指针。

那么进队操作时求队位号应该使用公式卫_。

A.Cqfront=(Cq_front+l)%mB.Cq_front=(Cqfront+l)%(m+l)

C.Cqrear=(Cq_rear+l)%mD.Cqrear=(Cqrear+l)%(m+l)

9.在一个循环顺序队列里,队首指针Cq_front总是指向旦。

A.队首元素B.队首元素的前一个队位

C.任意位置D.队首元素的后一个队位

10.若一个栈的进栈序列是1、2、3、4,那么要求出栈序列为3、2、1、4时,进、出栈操作的顺序应该是A。

(注:

所给顺序中,I表示进栈操作,o表示出栈操作)

A.III000I0B.I0I0I0I0C.II00I0I0D.I0III000

4.设有一个8阶的对称矩阵A,采用以行优先的方式压缩存储。

为第1个元素,其存储地址为1,每个元素占一个地址空间。

试问元素曙的地址是A。

A.33B.30C.13D.23

5.一个加w的对称矩阵,如果以行优先的方式压缩存入存。

那么所需存储区的容量应该是

A.〃序(矿1)/2B.m^n/2C.於(庐1)/2D.(血'1)*(加1)/2

7.二维数组M中的每个元素占用3个存储单元,行下标,从1变到8,列下标丿从1变到10。

现从首地址为SA的存储区开始存放A。

那么该数组以行优先存放时,元素A[8][5]的起始地址应该是C。

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

8•设有一个5阶上三角矩阵A,将其元素按列优先顺序存放在一维数组B中。

已知每个元素占用2个存储单元,B[l]的地址是100。

那么A[3][4]的地址是A。

A.116B.118C.120D.122

6.在一棵非空二叉树的中序遍历序列里,根结点的右边D结点。

A.只有左子树上的部分B.只有左子树上的所有

C.只有右子树上的部分D.只有右子树上的所有

8.权值为1、2、6,8的四个结点,所构造的哈夫曼树的带权路径长度是D。

A.18B.28C.19D.29

9.一棵二叉树度2的结点数为7,度1的结点数为6。

那么它的叶结点数是C。

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

10.在一棵二叉树中,第5层上的结点数最多是C个。

A.8B.15C.16D.32

1.已知一棵单右支的二叉树,如下左图所示。

把它还原成森林,应该是丄。

Cf

B.

Qvd

2.

3.

4.

将一棵树Tr转换成相应的二叉树Bt,A.先序遍历B.中序遍历

将一棵树Tr转换成相应的二叉树Bt,

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

设森林F中有3棵树,依次有结点

那么对Tr的先序遍历是对Bt的A。

C.后序遍历D.无法确定

那么对Tr的后序遍历是对Bt的旦。

C.后序遍历D.无法确定

血、m个。

把该森林转换成对应的二叉树后,该

0-000

二叉树的右子树上的结点个数是卫_。

C・Di

A・B・巾+处

5•设有由三棵树T-T2、几组成的森林,其结点个数分别为叫叽与该森林相应的二叉树为Bt。

则该二叉树根结点的左子树中应该有结点A个。

A.口一1B・fhC・厲+1D.

6.现有一棵度为3的树,它有两个度为3的结点,一个度为2的结点,两个度为1的结点。

那么其度为0的结点的个数应该是£。

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

注意:

有n个结点的树,树中所有结点的度之和为n-l。

现在这棵树应该满足条件:

n-1=2*3+1*2+2*1=10

这表示该树共有11个结点(加上一个根结点)。

在11个结点里,减去度为3、2、1的结点数5,剩下的就是度为0的结点。

所以,该树有叶结点6个。

7.一棵有个结点的树,在把它转换成对应的二叉树之后,该二叉树根结点的左子树上共有」L个结点。

A.n~2B.rr\C・MlD・/t+2

8.一棵有”个结点的树,在把它转换成对应的二叉树之后,该二叉树根结点的右子树上共有A个结点。

A.0B・〃C・卅1D./t+2

1.在一个有m个顶点的无向图中,要连通全部顶点,至少需要C条边。

A・nB./t+1C・n~\D・n/2

2.对于一个无向完全图来说,它的每个不同顶点对之间,都存在有一条边。

因此,有"个顶点的无向完全图包含有C条边。

A./7(/?

-1)B.n(/?

+1)C.n(n~l)/2D./?

(/?

+1)/2

3.对于一个有向完全图来说,它的每个不同顶点对之间,都存在有两条弧。

因此,有"个顶点的有向完全图包含有A条边。

A./7(/7-1)B./7(/7+1)C./7(/7-1)/2D./?

(/?

+1)/2

4.在一个无向图中,所有顶点的度数之和,是其所有边数之和的£倍。

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

5.在一个有向图中,所有顶点的入度之和卫所有顶点的出度之和。

A.二分之一于B.等于C.两倍于D.四倍于

6.一个无向连通网图的最小生成树A。

A.有一棵或多棵B.只有一棵C.一定有多棵D.可能不存在

7.一个无向图有”个顶点,那么该图拥有的边数至少是R。

A.2/7B.nC.n/2D.0

8.一个有个顶点的无向连通网图,其生成树里含有£条边。

A.4/7-1B.2//-1C.n~\D.n/2

三、问答題(4分/题,共5题)

1.在一个单链表中,为了删除指针ptr所指的结点,有人编写了下面的操作序列。

读懂并加以理解。

试问,编写者能够达到目的吗?

其思想是什么?

x=ptr->Data;

qtr=ptr->Next:

ptr->Data=ptr->Next->Data;

ptr->Next=ptr->Next->Next;

free(qtr):

答:

能够达到删除指针ptr所指结点的目的。

编写者的思想是不去直接删除ptr所指的结点,而是在把ptr直接后继的Data域容写入ptr所指结点的Data域之后,把它的直接后继删除。

对于单链表来说,得到一个结点的直接后继容易,得到它的直接前驱难,所以这样的设计是有其可取之处的。

2.在一个单链表中,为了在指针ptr所指结点之前插入一个由指针qtr所指的结点,有人编写了下面的操作序列,其中temp是一个临时工作单元。

读懂并加以理解。

试问,编写者能够达到目的吗?

其思想是什么?

qtr->Next=ptr->Next:

ptr->Next=qtr;

temp=ptr->Data;

p->Data=qtr->Data;

qtr->Data=temp;

答:

能够达到在指针ptr所指结点之前插入一个由指针qtr所指结点的目的。

编写者的思想是考虑到在单链表中得到一个结点的前驱信息较为困难,因此在这里先把qtr所指结点插入到ptr所指结点的后面,暂时成为它的直接后继。

然后通过临时工作单元temp,将ptr及qtr所指结点的Data域容进行交换,从而达到插入的目的。

4.设有6个元素al、a2、a3、a4、a5、a6,它们以此顺序依次进栈。

假定要求它们的出栈顺序是a4、a3、a2、a6、a5、al,那么应该如何安排push和pop操作序列?

答:

所需的push和pop操作序列如下:

push,push,push,push,pop,pop,pop,push,push,pop,pop,pop

5.有中缀表达式a/(b/(c/(d/e)))o有人将其转化为相应的后缀表达式是abcde////。

这一转化结果对吗?

答:

转化结果是对的。

7.分别写出如图5-32所示二叉树的先序、中序、后序遍历序列。

答:

先序遍历序列为:

A-B-C-D-F-G-H-E,中序遍历序列为:

B-A-D-G-F-H-C-E,后序遍

历序列为:

B-G-H-F-D-E-C-A。

3.有如图7-23所示的一个无向图,给出它的邻接矩阵以及从顶点⑴出发的深度优先遍历序列。

 

答:

它的邻接矩阵如图所示。

从顶点H出发的深度优先遍历序列为:

Vl->V2->Vi->V5->V7->V6->V3

注意,该序列是不唯一的。

0

0

0

0

1

0

0

■011000

100100

100100

011011

000100

000100

000010

4.应用题(6分/题,共5题)

3.分析算法段中标有记号“肃”和“#2”的基本操作的执行次数:

for(i=0;i

for(j=0;j

{

#iy=l;

for(k=0;k

#2y=y+l;

}

答:

标有记号"站”的基本操作的执行次数是:

『;标有记号“戟”的基本操作的执行次数是:

n%

4.绐出下面3个算法段的时间复杂度:

(1)x++;

(2)for(j=l;j

x++;

(3)for(j=l;j<=n;j++)

{

printf("j二%”.j);

for(k=j;k<=n;k++)

x++;

答:

(1)的时间复杂度为0

(1);

(2)的时间复杂度0(";

(3)中"printf(“/%”,6;”执行次数的数量级为05),"x++;”执行次数是:

卅(/?

-1)+(/?

-2)++2+1=刀(/?

+1)/2

其数量级为0(/),因此整个算法段的时间复杂度应该是0(//)。

4.试设计一个算法copy(Ckhl,Ckh2),将一个带表头结点的、以Ckhl为表头指针的单链表Ckl的容,复制到一个不带表头结点的、以Ck_h2为表头指针的单链表Ck2中。

答:

算法具体如下。

Copy(Ck_hLCk_h2)

ptr=Ck_hl->Next;

qtr=Ck_h2;

while(ptr!

=NULL)

{

rtr=malloc(size);

rtr->Data=ptr->Data;

qtr->Next二rtr;

qtr=rtr:

ptr=ptr->Next;

}

qtr->Next=NULL;

}

5.已知一个带表头结点的递增单链表。

试编写一个算法,功能是从表中去除值大于min、且值小于max的数据元素。

(假定表中存在这样的元素)

答:

所需算法编写如下。

Del_Sq(Lk_htmin・max)

ptr=Lk_h->Next:

/♦ptr指向钺表的起始结点♦/

while((ptr!

=NULL)&&(ptr->Data<=min))/*跳过所有值<=min的结点♦/

{

qtr=ptr;

ptr=ptr->Next;

}

while((ptr!

=NULL)&&(ptr->Data

p=p->Next:

qtr->Next=ptr;/♦qtr指出第1个大于max的结点位置,完成♦/

}

6.已知一个带表头结点的无序单链表。

试编写一个算法,功能是从表中去除所有值大于min、且值小于max的数据元素。

答:

所需算法编写如下,其中指针ptr总是指向当前被检查的结点,qtr总是指向被检查结点的直接前驱。

Del_Lk(Lk_h.min.max)

ptr=Lk_h->Next;

/*ptr指向单链表的起始结点*/

while(ptr!

=NULL)

/*扫视直到链尾结点♦/

if((ptr->Data<=min)(ptr->Data>=max)/*不满足删除条件♦/

{

qtr=ptr;/♦往后移动qtr和ptr♦/

ptr=ptr->Next;

}

else/♦删除ptr所指结点,往后移动ptr♦/

qtr->Next=ptr->Next;

free(ptr):

ptr=qtr->Next;

}

}

}

7.一个单链表Lk的表头指针为Lkh,不同结点的Data域值有可能相同。

编写一个算法,功能是计算出域值为x的结点的个数。

答:

算法应该遍历链表的每一个结点,遇到一个结点的Data域值为x时,计数器n就加1。

最后返回计数器n。

Count_Lk(Lk_h)

n=0;

ptr=Lk_h;

while(ptr!

=NULL)

{

if(ptr->Data—x)

n=n+1;

ptr=ptr->Next

}

return(n);

}

3.编写一个算法,它能够取得链式队列首元素的值。

答:

取得链式队列首元素的值,只有在队列非空的前途下才有意义。

算法编写如下。

Getf_Lq(Lq_front.Lq_rear)

if(Lq_front==Lq_rear)/♦队列空!

♦/

printf("TheIinkedqueueisempty!

");

else/♦队列非空!

*/

ptr=Lq_front->Next;

x=ptr->Data;

return(x);

}

}

5.将中缀表达式转化为后缀表达式的方法类似于中缀表达式求值。

具体地,要开辟一个运算符栈op和一个数组st。

在自左至右扫描算术表达式时,遇到操作数就直接顺序存入st;遇到运算符时就与op栈顶元素比较,高则进栈,不高则让栈顶元素出栈,存入st,然后该运算符再次去与新的op栈顶元素比较。

最后,在数组st里形成所需要的后缀表达式。

试用这种方法,用图示将中缀表达式5+8*3-2转化成为相应的后缀表达式。

答:

相应的后缀表达式是583*+2-,其图示如下。

stopstopstopStOp

4.编写一个算法,将顺序串St中所有的大写字母全部换成小写字母。

(提示:

大写英文字母A~Z对应的ASCII码为65为0,小写英文字母『z对应的ASCII码为97~122,在大写字母的ASCII码上加32,就是对应小写字母的ASCII码)

答:

算法编写如下。

Catosm_St(St)

for(i=l;i<=St_len;i卄)

if((A<=St[i])&&(St[i]<=Z))

St[订=St[i]+32;

}

8.已知两个mxn的矩阵A和B。

编写一个算法,求C=A+B。

即C也是一个mxn的矩阵,其元素满足条件:

Cj./=a;./+b;7(\WiWni、1W丿Wc)

答:

算法名为Add_Mt(),参数为A,B,Co

AddJit(A.B.C)

for(i=l;i<=m;i++)

for(j=l;j<=n;j++)

C[i][j]=A[i][j]+B[i][j];

2.已知中序遍历序列为:

A-B-C-E-F-G-H-D,后序遍历序列为:

A-B-F-H-G-E-D-C。

试画出这棵二叉树。

答:

这棵二叉树如应用题2答案图所示。

6.权

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

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

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

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