数据结构问答题Word文档下载推荐.docx

上传人:b****1 文档编号:5571099 上传时间:2023-05-05 格式:DOCX 页数:28 大小:45.98KB
下载 相关 举报
数据结构问答题Word文档下载推荐.docx_第1页
第1页 / 共28页
数据结构问答题Word文档下载推荐.docx_第2页
第2页 / 共28页
数据结构问答题Word文档下载推荐.docx_第3页
第3页 / 共28页
数据结构问答题Word文档下载推荐.docx_第4页
第4页 / 共28页
数据结构问答题Word文档下载推荐.docx_第5页
第5页 / 共28页
数据结构问答题Word文档下载推荐.docx_第6页
第6页 / 共28页
数据结构问答题Word文档下载推荐.docx_第7页
第7页 / 共28页
数据结构问答题Word文档下载推荐.docx_第8页
第8页 / 共28页
数据结构问答题Word文档下载推荐.docx_第9页
第9页 / 共28页
数据结构问答题Word文档下载推荐.docx_第10页
第10页 / 共28页
数据结构问答题Word文档下载推荐.docx_第11页
第11页 / 共28页
数据结构问答题Word文档下载推荐.docx_第12页
第12页 / 共28页
数据结构问答题Word文档下载推荐.docx_第13页
第13页 / 共28页
数据结构问答题Word文档下载推荐.docx_第14页
第14页 / 共28页
数据结构问答题Word文档下载推荐.docx_第15页
第15页 / 共28页
数据结构问答题Word文档下载推荐.docx_第16页
第16页 / 共28页
数据结构问答题Word文档下载推荐.docx_第17页
第17页 / 共28页
数据结构问答题Word文档下载推荐.docx_第18页
第18页 / 共28页
数据结构问答题Word文档下载推荐.docx_第19页
第19页 / 共28页
数据结构问答题Word文档下载推荐.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数据结构问答题Word文档下载推荐.docx

《数据结构问答题Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构问答题Word文档下载推荐.docx(28页珍藏版)》请在冰点文库上搜索。

数据结构问答题Word文档下载推荐.docx

有鉴于此,顺序线性表不能很好适应其需要,故是不合适的。

3、在单链表和双向表中,能否从当前结点出发访问到任一结点?

在单链表中只能由当前结点访问其后的任一结点,因为没有指向其前驱结点的指针。

而在双向链表中,既有指向后继结点的指针又有指向前驱结点的指针,故可由当前结点出发访问链表中任一结点。

4、对链表设置头结点的作用是什么?

(至少说出两条好处)

(1)对带头结点的链表,在表的任何结点之前插入结点或删除表中任何结点,所要做的都是修改前一结点的指针域,因为任何元素结点都有前驱结点。

若链表没有头结点,则首元素结点没有前驱结点,在其前插入结点或删除该结点时操作会复杂些。

(2)对带头结点的链表,表头指针是指向头结点的非空指针,因此空表与非空表的处理是一样的。

5、在单链表、双链表和单循环表中,若仅知道指针p指向某结点,不知道头指针,能否将结点*p从相应的链表中删去?

若可以,其时间复杂度各为多少?

1.单链表。

当我们知道指针p指向某结点时,能够根据该指针找到其直接后继,但是由于不知道其头指针,所以无法访问到p指针指向的结点的直接前趋。

因此无法删去该结点。

2.双链表。

由于这样的链表提供双向链接,因此根据已知结点可以查找到其直接前趋和直接后继,从而可以删除该结点。

其时间复杂度为O

(1)。

3.单循环链表。

根据已知结点位置,我们可以直接得到其后相邻的结点位置(直接后继),又因为是循环链表,所以我们可以通过查找,得到p结点的直接前趋。

因此可以删去p所指结点。

其时间复杂度应为O(n)。

6、简述顺序表和链表存储方式的特点。

顺序表可以直接存取数据元素,方便灵活、效率高,但插入、删除操作时将会引起元素的大量移动,因而降低效率;

而链表内存采用动态分配,利用率高,但需增设指示结点之间关系的指针域,存取数据元素不如顺序表方便,但结点的插入、删除操作较简单。

 

栈和队列

1、试述栈的基本性质?

由栈的定义可知,这种结构的基本性质综述如下:

(1)集合性。

栈是由若干个元素集合而成,当没有元素的空集合称为空栈;

(2)线性结构。

除栈底元素和栈顶元素外,栈中任一元素均有唯一的前驱元素和后继元素;

(3)受限制的运算。

只允许在栈顶实施压入或弹出操作,且栈顶位置由栈指针所指示;

(4)数学性质。

当多个编号元素依某种顺序压入,且可任意时刻弹出时,所获得的编号元素排列的数目,恰好满足卡塔南数列的计算,即:

Cn=Cn2n/(n+1)

其中,n为编号元素的个数,Cn是可能的排列数目。

4、为什么说栈是一种后进先出表?

栈是允许在同一端进行插入和删除操作的特殊线性表。

允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);

栈底固定,而栈顶浮动;

栈中元素个数为零时称为空栈。

插入一般称为进栈(PUSH),删除则称为退栈(POP)。

栈也称为后进先出表(LIFO--LastINFirstOut表)。

5、对于一个栈,给出输入项A,B,C。

如果输入项序列由A,B,C所组成,试给出全部可能的输出序列。

ABC,BAC,CBA

6、有字符串次序为3*y-a/y↑2,试利用栈给出将次序改变为3y-*ay2↑/-的操作步骤。

(可用X代表扫描该字符串函数中顺序取一字符进栈的操作,用S代表从栈中取出一个字符加到新字符串尾的出栈的操作)。

例如:

ABC变为BCA,则操作步骤为XXSXX。

X:

进栈S:

出栈XSXXXSSSXXSXXSXXSSSS

7、跟踪以下代码,显示每次调用后队列中的内容。

InitQueue(qu);

EnQueue(qu,'

A'

);

B);

C);

EnQueue(qu,x;

D);

E);

F);

EnQueue(qu,x)

G);

EnQueue(qu,X)

队列为空

队列为A

队列为AB

队列为ABC

队列为ABCx

队列为ABCxx

队列为ABCxxD

队列为ABCxxDE

队列为ABCxxDEF

EnQueue(qu,x)队列为ABCxxDEFx

队列为ABCxxDEFxG

EnQueue(qu,X)队列为ABCxxDEFxGX

EnQueue(qu,X)队列为ABCxxDEFxGXX

EnQueue(qu,X)队列为ABCxxDEFxGXXX

8、假设Q[0..10]是一个线性队列,初始状态为front=rear=0,画出做完下列操作后队列的头尾指针的状态变化情况,若不能入队,请指出其元素,并说明理由。

d,e,b,g,h入队

d,e出队

i,j,k,l,m入队

n,o,p入队

解答:

debgh

Fr

bgh

bghijklm

bghijklmnop

所有元素均正好能入队,共有11个存储空间,恰好11个元素

9、假设CQ[0..10]是一个环形队列,初始状态为front=rear=0,画出做完下列操作后队列的头尾指针的状态变化情况,若不能入队,请指出其元素,并说明理由。

b出队

图略。

p不能入队,共有11个地址,p为第12个元素,故不能入队

10、有5个元素,其进栈次序为A、B、C、D、E,在各种可能的出栈次序中,以元素C、D最先出栈(即C第一个且D第一个出栈)的次序有哪几个?

三个:

CDEBA,CDBEA,CDBAE

11、设输入元素为1、2、3、P和A,入栈次序为123PA,元素经过栈后到达输出序列,当所有元素均到达输出序列后,有哪些序列可以作为高级语言的变量名?

一般说,高级语言的变量名是以字母开头的字母数字序列。

故本题答案是:

AP321,PA321,P3A21,P32A1,P321A。

12、简要叙述栈和队列的特点.

栈和队列都是插入和删除操作的位置受限制的线性表。

栈是限定仅在表尾进行插入和删除的线性表,是后进先出的线性表,而队列是限定在表的一端进行插入,在另一端进行删除的线性表,是先进先出的线性表

树和二叉树

1、对于二叉排序树,当所有结点的权都相等的情况下,最佳二叉排序树有何特点。

其特点是只有最下面的二层结点可以小于2,其它结点的度数必须为2

3、已知一组元素为(46、25、78、62、18、34、12、40、73),试画出按元素排列顺序输入而生成的一棵二叉排序树。

得到的二叉排序树如下图所示。

46

2578

183462

124073

4、已知一棵树的边的集合表示为:

(L,N),(G,K),(G,L),(G,M),(B,E),(B,F),(D,G),

(D,H),(D,I),(D,J),(A,B),(A,C),(A,D))画出这棵树,并回答下列问题:

(1)树根是哪个结点?

哪些是叶子结点?

哪些是非终端结点?

(2)树的度是多少?

各个结点的度是多少?

(3)树的深度是多少?

各个结点的层数是多少?

以结点G为根的子树的深度是多少?

(4)对于结点G,它的双亲是哪个结点?

它的祖先是哪些结点?

它的孩子是哪些结点?

它的子孙是哪些结点?

它的兄弟和堂兄弟分别是哪些结点?

解答:

(1)树的根是A,而E、F、C、H、I、J、K、M、N是叶子结点,其它为非终端结点。

(2)树的度为4。

deg(A)=3,deg(B)=2,deg(D)=4,deg(G)=3,deg(L)=1,其它各叶子结点的度均为0。

(3)树的深度为5(设根结点的深度为1)。

level(A)=1,level(B)=2,level(C)=2,…,level(G)=3,…,level(K)=4,…,level(N)=5。

(4)D是G的双亲;

A、D是G的祖先;

K、L、M是G的孩子;

K、L、M和N是G的子孙;

H、I、J是G的兄弟;

E、F是G的堂兄弟。

5、设高度为h的二叉树上只有度为0和度为2的结点,问该二叉树的结点数可能达到的最大值和最小值。

最大值(高度为h的满二叉树)20+21+22+…+2h-1=2h-1

最小值:

第一层只有一个结点,其余的h-1层各有2个结点,所以最小值为2h-1个。

6、设二叉树BT的存储结构如下:

12345678910

┏━┳━┳━┳━┳━┳━┳━┳━┳━┳━┓

Lchild┃0┃0┃2┃3┃7┃5┃8┃0┃10┃1┃

┣━╋━╋━╋━╋━╋━╋━╋━╋━╋━┫

data┃J┃H┃F┃D┃B┃A┃C┃E┃G┃I┃

Rchild┃0┃0┃0┃9┃4┃0┃0┃0┃0┃0┃

┗━┻━┻━┻━┻━┻━┻━┻━┻━┻━┛

(1)画出图。

(2)写出前序、中序、后序遍历次序。

(1)见下图。

A

B

CD

EFG

HI

J

(2)前序遍历:

ABCEDFHGIJ

中序遍历:

ECBHFDJIGA

后序遍历:

ECHFJIGDBA

7、已知一棵二叉树先序遍历结果为ABCDEFGHIJ,中序遍历的结果为CBEDAHGIJF,试画出该二叉树。

由前序遍历结果可知该二叉树的根结点为A。

由此及中序遍历结果可知,该二叉树在中序遍历下的左、右子树为

CBED和HGIJF

依此可推出前序遍历的左、右子树的结点序列为

BCDE和FGHIJ

B和F又分别为左、右子树的根结点,进而又可推出以B为根结点的左、右子树,以及以F为根结点的左、右子树。

依此类推,可推出二叉树见下图。

A

BF

CDG

EHI

8、设a是含有n个元素的整数数组,写出一个求n个元素的平均值的递归定义。

#include<

stdio.h>

#defineAVE(A,B)aver(A,B,0)

doubleaver(float*a,intn,intt)

{

if(t!

=n)return(a[t]/n+aver(a,n,t+1));

elsereturn0;

}

intmain(void)

floata[]={1,5,9,13,17};

printf("

%f"

AVE(a,5));

return0;

9、设a是含有n个元素的整数数组:

(1)写出求该数组中最大元素的递归定义。

(2)写出求该数组中最小元素的递归定义。

(1)intA:

:

Max(intn)//递归求最大值

{

if(n==1)returnE[0];

intt=Max(n-1);

if(E[n-1]>

t)returnE[n-1];

elsereturnt;

}

(2)intA:

Min(intn)//递归求最小值

intt=Min(n-1);

10、设a是含有n个元素的整数数组:

(1)写出求n个整数之和的递归定义。

(2)写出求n个整数之积的递归定义。

Sum(intn)//递归求数组之和

elsereturnE[n-1]+Sum(n-1);

Multi(intn)//递归求整数之积

elsereturnE[n-1]*Multi(n-1);

11、二维数组A[4][4](即A[0..3][0..3])的元素起始地址是loc(A[0][0])=1000,元素的长度为2,则LOC(A[2][2])的地址为多少?

LOC(A[2][2])=loc(A[0][0])+(2*4+2)*2=1000+20=1020

1、无向图G如下图:

BE

/\/\

ADG

\/\/

CF

试给出

(1)该图的邻接矩阵。

(2)该图的邻接表。

(3)从A出发的“深度优先”遍历序列。

(4)从A出发的“广度优先”遍历序列。

(1)图G的邻接矩阵

┏0110000┓

┃1001000┃

A=┃0110110┃

┃0001001┃

┗0000110┛

(2)邻接表如见:

┌─┬─┐┌─┬─┐┌─┬─┐

1│A│┼→─┤B│┼→─┤C│^│

├─┼─┤├─┼─┤├─┼─┤

2│B│┼→─┤A│┼→─┤D│^│

3│C│┼→─┤A│┼→─┤D│^│

├─┼─┤├─┼─┤├─┼─┤┌─┬─┐┌─┬─┐

4│D│┼→─┤B│┼→─┤C│┼→┤E│^├→─┤F│^│

(3)从顶点A出发按深度优先遍历序列(不是唯一的)为A、B、D、C、E、G、F

(4)从顶点A出发按广度优先遍历序列(不是唯一的)为A、B、C、D、E、F、G

2、用邻接矩阵表示图时,矩阵元素的个数与顶点个数是否相关?

与边的条数是否有关?

设图的顶点个数为n(n≥0),则邻接矩阵元素个数为n2,即顶点个数的平方,与图的边数无关。

3、对于稠密图和稀疏图,就存储空间而言,采用邻接矩阵和邻接表哪个更好些?

稠密图采用邻接矩阵好,稀疏图采用邻接表好

4、请回答下列关于图的一些问题:

(1)有n个顶点的有向强连通图最多有多少条边?

这样的图应该是什么形状?

(2)有n个顶点的有向强连通图最少有多少条边?

(3)表示一个有1000个顶点、1000条边的有向图的邻接矩阵有多少个矩阵元素?

是否为稀疏矩阵?

(1)最多有n(n-1)条边

(2)最少有n条边

(3)106,不一定是稀疏矩阵(稀疏矩阵的定义是非零个数远小于该矩阵元素个数,且分布无规律)

5、对n个顶点的无向图和有向图,采用邻接矩阵和邻接表表示时,如何判别下列有关问题?

(1)图中有多少条边?

(2)任意两个顶点i和j是否有边相连?

(3)任意一个顶点的度是多少?

无向图采用邻接表时,⑴边表中的结点个数之和除以2。

⑵第i个边表中是否含有结点j。

⑶该顶点所对应的边表中所含结点个数。

6、己知一棵二叉树的中序序列为cbedahgijf,后序序列为cedbhjigfa,画出该二叉树的先序线索二叉树.

二叉树及线索二叉树(略)。

先序序列为:

abcdefghij

7、下列整数序列由选序遍历一棵二叉排序树得到:

50,40,30,45,65,55,70,80.试构造一棵这样的二叉排序树.

    

内部排序

1、设有5000个无序的元素,希望用最快速度挑选出其中前10个最大的元素。

在以下的排序方法中,采用哪种方法最好?

快速排序,堆排序,归并排序,基数排序的Shell排序。

1、上面所列的几种排序方法的速度都很块,但快速排序、归并排序、基数排序和希尔排序都是在排序结束后才能确定数据元素的全部顺序,而无法知道排序过程中部分元素的有序性。

而堆排序则每次输入一个最大(或最小)的元素,然后对堆进行调整,保证堆顶的元素总是余下元素中最大(或最小)的。

根据题意,只要选取前10个最大的元素,故采用堆排序方法是合适的

2、判断下列序列是否是堆。

若不是堆,则把它们依次调整为堆。

(1)(100,85,98,77,80,60,82,40,20,10,66)。

(2)(100,98,85,82,80,77,66,60,40,20,10)。

(3)(100,85,40,77,80,60,66,98,82,10,20)。

(4)(10,20,40,60,66,77,80,82,85,98,100)。

根据堆的定义可知堆中元素满足下面中的某一个式子的关系,

┌≤k2i┌≥k2i

①ki或②ki

└≤k2i+1└≥k2i+1

因此

(1)、

(2)和(4)序列是堆。

(3)不是堆。

(3)调整为100,98,66,85,80,60,40,77,82,10,20后成为堆。

3、什么是内部排序?

什么是排序方法的稳定性和不稳定性?

假设给定含有n个记录(R1,R2,…,Rn)的文件,其相应的关键字为(K1,K2,…,Kn),则排序是确定一个排列P

(1),P

(2),…,P(n),使得KP

(1)≤KP

(2),…,KP(n),

从而得到有序文件(RP

(1),RP

(2),…,RP(n))。

整个排序过程都在内存进行的排序称为内部排序。

假设在待排序的文件中,存在两个或两个以上的记录具有相同的关键字,在用某种排序法排序后,若这些相同关键字的记录的相对次序仍然保持不变,则这种排序方法是稳定的,否则称这种排序方法是不稳定的。

4、输入一个正整数序列{40,28,6,72,100,3,54,1,80,91,38},建立一棵二叉排序树,然后删除结点72,分别画出该二叉树及删除结点72后的二叉树。

5、设数据集合d={1,12,5,8,3,10,7,13,9},试完成下列各题:

(1)依次取d中各数据,构造一棵二叉排序树bt;

(2)如何依据此二叉树bt得到d的一个有序序列;

(3)画出在二叉树bt中删除"

12"

后的树结构。

(1)(3)图略。

(2)根据二叉排序树中左子树,根结点,右子树的排列顺序,有序序列:

1,3,5,7,8,9,10,12,13

6、对给定的数列R={7,16,4,8,20,9,6,18,5},构告一棵二叉排序树,并且

(1)给出按中序遍历得到的数列R1

(2)给出按后序遍历得到的数列R2

图略。

中序遍历序列R1:

5,6,4,7,8,9,16,18,20

后序遍历序列R2:

5,6,4,9,8,18,20,16,7

7、设有一组关键字{19,01,23,14,55,20,84,27,68,11,10,77},采用散列函数:

H(key)=key%13

采用开放地址法的线性探测再散列方法解决冲突,试在0~18的散列地址空间中对该关键字序列构造散列表。

H(19)=19MOD13=6

H(01)=01MOD13=1

H(23)=23MOD13=10

H(14)=14MOD13=1(冲突)

H(14)=(1+1)MOD19=2

H(55)=55MOD13=3

H(20)=20MOD13=7

H(84)=84MOD13=6(冲突)

H(84)=(6+1)MOD19=7(仍冲突)

H(84)=(6+2)MOD19=8

H(27)=27MOD13=1(冲突)

H(27)=(1+1)MOD19=2(冲突)

H(27)=(1+2)MOD19=3(仍冲突)

H(27)=(1+3)MOD19=4

H(68)=68MOD13=3(冲突)

H(68)=(3+1)MOD19=4(仍冲突)

H(68)=(3+2)MOD19=5

H(11)=11MOD13=11

H(10)=10MOD13=10(冲突)

H(10)=(10+1)MOD19=11(仍冲突)

H(10)=(10+2)MOD19=12

H(77)=77MOD13=12(冲突)

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

当前位置:首页 > 解决方案 > 营销活动策划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2