数据结构复习题答案.docx

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

数据结构复习题答案.docx

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

数据结构复习题答案.docx

数据结构复习题答案

选择题:

1、与顺序表相比,用链表表示线性表的优点是()。

A.便于随机存取B.便于元素的插入和删除操作

C.存储的密度较高D.元素的物理顺序与逻辑顺序一致

2、以下数据结构中,()是线性结构。

A.无向网B.队列C.二叉检索树D.有向无环

3、在长度为n的顺序表中,向第k个元素(1≤k≤n+1)之前插入一个新元素时,需向后移动()个元素。

A.n-kB.n-k+1C.n-k-1D.k

4、在长度为n的顺序表中,删除第k个元素(1≤k≤n+1)时,需向前移动()个元素。

A.n-kB.n-k+1C.n-k-1D.k

5、与顺序栈相比,链栈的主要优点在于()。

A.入栈操作更加方便B.出栈操作更加方便

C.通常不会出现栈满D.通常不会出现栈空

6、用大小为n的一维数组S存储一个栈,令S[0]为栈底,变量top表示当前栈顶的位置(下标),即S[top]为栈顶元素。

则,元素出栈后top应做如下()的修改。

A.top--;B.top++;

C.top=n-1;D.top=-1;

7、以链表作为栈的存储结构,令Sp为栈顶指针,栈空的判定条件是()。

A.Sp==NULLB.Sp>=-1

C.Sp!

=NULLD.Sp!

=-1

8、在一个单链表中,若要删除指针p所指向结点的后继结点,则需执行()中的语句。

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

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

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

D.p->next=p;

9、设栈S和队列Q的初始状态为空,元素a1,a2,a3,a4,a5,a6先后进入栈S,一个元素出栈后即进入队列Q,若6个元素的出队顺序是a2,a4,a3,a6,a5,a1,则栈S至少可以容纳()个元素。

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

10、若进栈序列为a1、a2、a3、a4,进栈过程允许出栈,则下列出栈序列中,()是不可能的。

A.a1、a3、a4、a2B.a2、a4、a3、a1

C.a3、a4、a2、a1D.a1、a4、a2、a3

11、设有一个大小为m的数组表示循环队列,若f表示当前队头元素在数组中的前一位置,r表示队尾元素的所在位置,则计算队列中元素个数的表达式为()。

A.r-fB.(m-f-r)%m

C.(m+f-r)%mD.(m+r-f)%m

12、在大小为n的循环队列中,假定front指示队头的位置,rear指示队尾的后一位置,则判定队空的条件是()。

A.rear==n-1B.(front+1)%n==rear

C.front==rearD.front==(rear+1)%n

13、深度为7的二叉树至多有()个结点。

A.127B.255C.128D.256

14、n个结点的二叉树,其最小深度是()。

A.log2n+1B.log2nC.n/2D.n

15、设二叉树中任一结点的值大于其左子树中每个结点的值,而小于其右子树中每个结点的值,即它是一个二叉排序树。

则中序遍历该二叉树时,访问结点的序列是一个值()的序列。

A.递减B.递增

C.先递减后递增D.先递增后递减

16、以顺序存储方式将完全二叉树中的所有结点逐层存放于数组A中,结点A[i]若有左孩子,则结点()是其左孩子。

A.A[2*i]B.A[2*i+1]C.A[2*i+2]D.A[i/2]

17、由3个结点可以构成()棵形态不同的树,或构成()棵形态不同的二叉树。

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

18、在下列存储形式中,()不适合于树。

A.双亲表示法B.孩子链表表示法

C.孩子兄弟表示法D.顺序存储表示法

19、某二叉树如图所示,对该二叉树进行中序遍历,结点的访问序列为()。

A.1,2,3,4,5,6,7

B.1,2,4,6,3,5,7

C.2,6,4,1,5,7,3

D.6,4,2,1,3,5,7

20、某二叉树如图所示,对该二叉树进行先序遍历的结点序列为()。

A.1,2,3,4,5,6,7

B.1,2,4,6,7,3,5

C.2,6,4,7,1,5,3

D.6,7,4,2,5,3,1

21、有n个顶点的无向完全图中,具有()条边。

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

22、对于一个具有n个顶点的图,若采用邻接矩阵表示,则矩阵中元素的个数为()。

A.nB.(n-1)2

C.(n+1)2D.n2

23、对图所示的无向图G,从顶点①开始,广度优先遍历,可能的顶点访问顺序为()。

A.①,②,③,④,⑤,⑥,⑦,⑧

B.①,②,⑥,③,④,⑦,⑧,⑤

C.①,②,⑥,③,④,⑤,⑦,⑧

D.①,②,③,⑤,④,⑥,⑦,⑧

24、对上一题的图G,从顶点①开始,深度优先遍历,则可能的顶点访问顺序为()。

A.①,②,③,④,⑤,⑥,⑦,⑧

B.①,②,⑥,③,④,⑦,⑧,⑤

C.①,②,⑥,③,④,⑤,⑦,⑧

D.①,②,③,⑤,④,⑥,⑦,⑧

25、有向图G有n个顶点,其邻接矩阵为A(二维数组),G中第k个顶点的度为()。

A.

B.

C.

D.

+

26、采用顺序检索的方法检索长度为n的顺序表,检索每个元素的平均比较次数(即平均检索长度)为()。

A.nB.n/2C.(n+1)/2D.(n-1)/2

27、设检索表(a1,a2,a3,...,a32)中有32条记录,且已按关键字递增有序排列,采用二分法检索一个与给定的键值K相等的记录,若a1.key

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

28、哈希检索的基本思想是依据关键字值的简单换算来决定()。

A.记录的存储地址B.记录的序号

C.平均检索长度D.哈希表空间

29、设有一个用线性探测法解决冲突得到的哈希表(哈希函数:

H(key)=key%11):

012345678910

13

25

80

16

17

6

14

若要检索关键字值为14的记录,探测(比较)的次数是()。

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

30、设计一个用线性探测法解决冲突的哈希表(哈希函数:

H(key)=key%17),其地址区间为0..16,现将关键字值分别为26、25、72、38、8、18、59的记录依次存储到哈希表中。

关键字值为59的记录在哈希表中的地址(下标)是()。

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

31、用直接插入排序法对下面4个序列进行递增(由小到大)排序,元素比较次数和移动次数最少的是()。

A.10,3,4,9,8,6,2,7B.2,3,6,4,8,7,9,10

C.3,4,2,6,7,10,9,8D.9,7,8,6,2,3,10,4

32、对10个记录的序列:

4,3,6,9,7,1,2,5,0,8进行排序,若采用快速排序,一趟分割之后序列的次序是()。

A.3,4,6,9,1,7,2,5,0,8B.0,3,2,1,4,7,9,5,6,8

C.3,4,6,1,7,2,5,0,8,9D.1,2,5,0,8,4,3,6,9,7

33、对10个记录的序列:

4,3,6,9,7,1,2,5,0,8用归并排序方法进行一趟归并后的结果为()。

A.3,4,6,9,1,7,2,5,0,8B.0,3,2,1,4,7,9,5,6,8

C.3,4,6,1,7,2,5,0,8,9D.1,2,5,0,8,4,3,6,9,7

34、以下排序算法中,时间复杂度最高的是()。

A.希尔排序B.归并排序C.冒泡排序D.堆排序

35、以下排序算法中,需要附加的内存空间最小的是()。

A.归并排序B.快速排序C.堆排序D.树形选择排序

36、以下排序算法中,时间复杂度最小的是()。

A.二分插入排序B.直接选择排序

C.冒泡排序D.归并排序

37、对n个元素进行快速排序,所需要的辅助存储空间为()。

A.O

(1)B.O(n)C.O(log2n)D.O(n2)

是非题:

1、在顺序表中定位第i个元素所花费的时间与i成正比。

(×)

2、在单链表中访问第i个元素所花费的时间与i成正比。

(√)

3、链式存储结构的优点是存储密度大,且插入和删除运算的效率高。

(×)

4、栈和队列都是顺序存储的线性结构。

(×)

5、“后进先出”不符合栈的特性。

(×)

6、一个2维数组可以视为其数据元素是1维数组的线性表。

(√)

7、空表就是所有元素都为0的表。

(×)

8、顺序存储结构不仅适宜表示完全二叉树,也完全适宜表示一般的二叉树。

(×)

9、二叉树先序遍历序列的最后一个结点,必是其中序遍历序列中的最后一个结点。

(×)

10、不使用递归也能实现二叉树的遍历。

(√)

11、一个无向图的邻接表中表结点的个数与边的个数一致。

(×)

12、一个有向图的邻接表和逆邻接表中表结点的个数不一定相等。

(×)

13、邻接表只能用于有向图的存储。

(×)

14、邻接矩阵只能用于表示无向图的顶点关系。

(×)

15、n(n>3)个带权叶子结点可以构成多棵哈夫曼树(最优二叉树)。

(√)

16、无向连通网存在最小生成树问题,而有向图不存在最短路径问题。

(×)

17、运用二分检索时,检索表中的元素必需以关键字递增(由小到大)有序排列。

(×)

18、哈希表中若不存在地址冲突或同义词,则其成功检索的平均检索长度等于1。

 (√)

19、二路归并排序的核心操作是将两个有序序列合并为一个有序序列。

(√)

20、顺序检索表中的记录关键字递减(由大到小)有序时,不宜运用折半检索。

(×)

21、通常,选择排序比插入排序的元素交换次数要少。

 (√)

22、对n个元素的集合进行归并排序时,需要的辅助存储空间为O(log2n)。

(×)

填空题:

1、在一个单链表中,在指针p所指向的结点之后插入指针s所指向的结点时,应执行如下操作:

s->next=p->next;p->next=s;

2、在一个单链表中,要删除指针p所指向结点的后继结点,应执行如下操作:

p->next=

p->next->next;

3、在一个链栈中,Top为指向栈顶的指针,p所指向的结点入栈时,应顺序执行如下操作语句:

p->next=Top;Top=p;

4、栈中的最后一个元素称为栈顶。

队列的第一个元素称为队首。

5、栈作为函数局部数据空间的数据结构。

队列作为文件缓冲区的数据结构。

6、size个结点的循环队列中,front指示当前队头的位置(下标),rear指示当前队尾的后一位置。

那么,在元素出队前,要执行front=(front+1)%size;语句;在元素入队前,要执行rear=(rear+1)%size;语句。

7、64个结点的完全二叉树中,有32个分枝结点,有32个叶子结点。

8、有15个结点的二叉树的二叉链表中,共有30个指针,其中有14个指针用于指向左、右孩子,剩余的16个指针为空。

9、一棵深度为6的满二叉树中,叶子结点的个数为32,分支结点的个数为31。

10、在有9个顶点的有向完全图中,共有72条弧。

11、在有9个顶点的无向完全图中,共有36条边;而其生成树中,有8条边。

12、各种选择排序算法中,最优的时间复杂度为O(nlog2n);最糟的时间复杂度为O(n2)。

13、各种排序算法中,最优的空间复杂度为O

(1);最坏的空间复杂度为O(n)。

14、含有n个顶点的有向图的邻接矩阵为A(Ai,j是其第i行、第j列元素),计算第i个顶点的出度公式为

;计算其入度的公式为

15、哈希(散列)检索的平均检索长度可以趋近于1。

16、平衡二叉检索树是指其任一结点的左子树与右子树深度的差不大于1的二叉检索树。

17、在连通的无向图中,求解指定源点到指定终点的最短路径,可以采用广度优先搜索算法。

18、求解连通网最小生成树的Prim算法的时间复杂度为O(n2),而Kruscal算法适用于边稀疏(e<=nlog2n)的连通网。

应用题:

1、已知一棵二叉树的先序遍历序列为ABCDEFGH,中序遍历序列为CBEDAHGF,试画出该二叉树。

2、试分别画出下面二叉树的二叉链表,并分别写出先序遍历和中序遍历该二叉树的结点访问序列。

3、如下无向图的顶点依次存储为a、b、c、d和e,试画出该图的邻接表。

4、如下有向图的顶点依次存储为A,B,C,D,E和F,试画出该图的邻接矩阵。

5、有向图的邻接矩阵如下所示,顶点的次序依次为A,B,C,D,E,试画出该图及其邻接表。

6、已知顺序表中存储的序列{3,2,5,0,8,4,9,6,7,1},将元素按其在表中的次序依次插入到一棵初始为空的二叉检索树中,画出插入完成后的二叉检索树,并计算该检索树在等概率情况下的成功检索的平均检索长度。

7、已知顺序表中存储的序列{Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday},将元素按其在表中的次序依次插入到一棵初始为空的二叉检索树中,画出插入完成后的二叉检索树,并计算该检索树在等概率情况下的成功检索的平均检索长度。

8、已知某通讯电文中仅使用A、B、C、D、E等5个符号,且这些符号在电文中分别出现27、14、5、76、21次,试以这5个符号设计(画出)哈夫曼树,并写出其哈夫曼编码。

编程题:

1、线性表以单链表存储,指向头结点的指针为hp,试编写计算表长(元素结点个数)算法的函数。

假设,单链表的结点类型已定义为node,它含有存放元素的data域和指向后继结点的指针域next。

intlength(node*hp)

{intn=0;

nodep=hp->next;

while(p!

=NULL)

{n++;

p=p->next;

}

returnn;

}

2、编写一个实现在单链表中查找返回给定元素的结点地址的函数。

node*locate(node*hp,elemtpa)

{node*p=hp->next;

while(p!

=NULL&&p->data!

=a)p=p->next;

returnp;

}

3、编写一个实现在单链表中查找返回给定元素前趋的结点地址的函数。

node*locate_pre(node*hp,elemtpa)

{node*p=hp;

while(p->next!

=NULL&&p->next->data!

=a)p=p->next;

if(p->next!

=NULL)returnp;

returnNULL;

}

4、编写一个实现在单链表中指针p所指结点之后插入新元素结点的函数。

intinsert(node*hp,node*p,elemtpa)

{node*q=hp->next;

while(q!

=NULL&&q!

=p)p=p->next;

if(q==NULL)return0;//插入点不存在

q=newnode;

q->data=a;q->next=p->next;

p->next=q;

return1;

}

5、编写以二叉链表表示的二叉树中序遍历的算法函数。

voidtravel_mid(bt_node*bp)

{if(bp!

=NULL)

{travel_mid(bp->lp);

visit(bp);//访问结点

travel_mid(bp->rp);

}

6、编写一个计算以二叉链表表示的二叉树中叶子结点个数的函数。

intleaf_number(node*bp)

{if(bp==NULL)return0;

if(bp->lp==NULL&&bp->rp==NULL)return1;

returnleaf_number(bp->lp)+leaf_number(bp->rp);

}

7、以顺序表存储记录。

编写一个实现直接选择排序的函数。

voidsort_direct_sele(listnode*L,intn)

{inti,j,k;

listnodetemp;

for(i=0;i

{k=i;//每趟的起始记录初始化为候选记录

for(j=i+1;j

if(L[j].key

if(k!

=i)

{temp=L[i];L[i]=L[k];L[k]=temp;}//起始记录与最小记录交换

}

}

8、以顺序表存储记录。

编写一个实现直接插入排序的函数。

voidsort_direct_instert(listnode*L,intn)

{inti,j;

listnodetemp;

for(i=1;i

{temp=L[i];//暂存待插入记录

j=i-1;

while((j>=0)&&(temp.key

{L[j+1]=L[j];

j--;

}

L[j+1]=temp;//插入待插记录

}

}

9、编写一个在实现二叉检索树静态检索(查找并返回给定键值记录的存储地址)的函数。

bts_node*search(bts_node*p,keytypeK)

{while(p!

=NULL)

if(p->key==K)break;//检索成功

elseif(p->key>K)p=p->lp;

elsep=p->rp;

returnp;

}

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

当前位置:首页 > 初中教育 > 初中作文

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

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