您的当前位置:首页正文

数据结构II试卷(B)答案2018年6月

来源:华佗健康网
东 北 大 学 继 续 教 育 学 院

数据结构II 试 卷(作业考核 线上) B 卷

(共 10 页)

总分 题号 得分 一 二 三 四 五 六 七

一、单选题(每小题2分,共10小题,20分) [ A ] 1.抽象数据类型的三个组成部分分别为 A.数据对象、数据关系和基本操作

B.数据元素、逻辑结构和存储结构 C.数据项、数据元素和数据类型 D.数据元素、数据结构和数据类型

[ D ] 2.下列各式中,按增长率由小至大的顺序正确排列的是 A.n,n!,2n ,n3/2 B.n3/2,2n,nlogn,2100

C.2n,log n,nlogn,n3/2 D.2100,logn, 2n, nn

[ A ] 3. 已知指针p和q分别指向某单链表中第一个结点和最后一个结点。假设指针s指向

另一个单链表中某个结点,则在s所指结点之后插入上述链表应执行的语句为

A. q->next=s->next;s->next=p; B. s->next=p;q->next=s->next; C. p->next=s->next;s->next=q; D. s->next=q;p->next=s->next;

[ C ] 4.二维数组A[20][10]采用行优先的存储方法,若每个元素占2个存储单元,且第1

个元素的首地址为200,则元素A[8][9]的存储地址为 A.374 B.576 C.378 D.580

[ B ] 5.设有一个顺序栈的入栈序列是a、b、c,则3个元素都出栈的可能不同排列个数为 A.4 B.5

C. 6 D. 7

[ D ] 6. 设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1 则T中的

叶子数为

A.5 B.6 C.7 D.8 [ C ] 7.以下说法不正确的是

A.无向图中的极大连通子图称为连通分量

1 / 10

B.连通图的广度优先搜索中一般要采用队列来暂存刚访问过的顶点 C.图的深度优先搜索中一般要采用栈来暂存刚访问过的顶点 D.有向图的遍历不可采用广度优先搜索

[ B ] 8. 假设在构建散列表时,采用线性探测解决冲突。若连续插入的n个关键字都是同义

词,则查找其中最后插入的关键字时,所需进行的比较次数为

A. n-1 B. n C. n+l D. n+2 [ B ] 9.设置溢出区的文件是

A.索引非顺序文件 B.ISAM文件 C.VSAM文件 D.顺序文件

[ A ] 10. 已知一组关键字为{25,48,36,72,79,82,23,40,16,35},其中每相邻两个为有序子序列。对这些子序列进行一趟两两归并的结果是 A.{25,36,48,72,23,40,79,82,16,35} B.{25,36,48,72,16,23,40,79,82,35} C.{25,36,48,72,16,23,35,40,79,82} D.{16,23,25,35,36,40,48,72,79,82} 二、填空题(每小题1分,共10小题,10分)

11.下面程序段中带下划线的语句的执行次数的数量级是( log2n )。

i=1; WHILE(i12.假设带头结点的非空单循环链表中仅设尾指针L,则在第1个结点之前插入指针s所指

结点的语句依次是(s->nest=L->next->next;L->next->next =S)。 13.无表头结点的链队列Q为空的条件是(Q->real==Q->front=NULL)。

14.设Q[0..N-1]为循环队列,其头、尾指针分别为P和R,则队Q中当前所含元素个数为

( (R-P+N)% N )。

15.一棵含999个结点的完全二叉树的深度为(10)。

16.在 AOV网 中,存在环意味着某项活动以自己为先决条件;对程序的数据流图来说,它

表明存在( 死循环 )。

17. 有向图G可拓扑排序的判别条件是( 不存在环 )。

18.如果结点A有 3个兄弟,而且B是A的双亲,则B的度是( 4 )。

19.应用回溯与分支限界法解决实际问题时,在搜索过程中利用判定函数,也称为(限界函

数)。

20. 若以1234作为双端队列的输入序列,则既不能由输入受限的双端队列得到,也不能由输

2 / 10

出受限的双端队列得到的输出序列是( 4231 )。

三、应用题(每小题6分,共5小题,30分) 21.比较线性表和栈的基本操作的不同点。 解答:

主要区别是对插入和删除操作的限制。

如线性表允许在表内任一位置进行插入和删除;而队列只允许在表尾一端进行插入,在表头一端进行删除;所以也称队列为受限的线性表。表头为队列头;表尾为队列尾。 插 入 删 除

线性表 Insert(L,i,x) Delete(L,i) (1≤i≤n+1) (1≤i≤n) 队列 Insert(L,n+1,x) Delete(L,1)

22.有一个二叉树按层次顺序存放在一维数组中,如下图所示:

试求:(1)该树的后序遍历序列。 (2)画出该树的后序线索树。

1 2 3 4 5 6 7 8 9 10 11

A C B E D

解答:

(1)后序遍历序列 C E D B A (2)后序线索树

A C B E D 23.分析顺序查找算法的“监视哨”设置作用 解答:

为了考虑查找不成功的情况,在每次进行关键字的比较前,首先要判断循环变量i是否数组

越界,这对算法来说是必要的。如果每步省略数组下标是否越界的判断,则可以大大提高算法运行的效率。为此,可以利用预留的0号单元,作为所设的“监视哨”控制循环变量i的出界。

假设数据从后向前比较,监视哨设在数组低端 L.elem [0] = k 将算法中的判断语句

while (i <= L.length &&L.elem [i] != k) ++i; 改为 while (L.elem [i] != k) --i;

这样,当在查找表中不存在其关键字等于给定值的数据元素时,i必等于0,并且这样的处理并不影响查找成功的情况。

24.对n个整数的序列进行直接选择排序。

3 / 10

(1)算法描述。

(2)并给出实例(52 49 80 36 14 58 61 23 )的排序过程。 解答:

(1)直接选择算法描述:

[1] 第1趟,从n个记录中,经过比较选出关键字值为最小的记录,并与第1个记录交换位置。

[2] 第2趟,从余下的n-1个记录中选择出当前关键字最小的排序,并与第 2个记录交换位置。

[3] 第i趟,在无序的第i个到第n个的n-i+1 个记录中选出关键字最小的记录,与

第i个记录进行互换。

[4] 以此类推,直至第n-1趟排序结束。

(2)初始状态 52 49 80 36 14 58 61 23 i=1 [14] 49 80 36 52 58 61 23 i=2 [14 23] 80 36 52 58 61 49 i=3 [14 23 36] 80 52 58 61 49 i=4 [14 23 36 49] 52 58 61 80 i=5 [14 23 36 49 52] 58 61 80 i=6 [14 23 36 49 52 58] 61 80 i=7 [14 23 36 49 52 58 61] 80 排序结果 [14 23 36 49 52 58 61 80 ]

25. 已知有一个10个顶点的连通图,顶点编号为1至10,其边的关系集合表示为{(1,2)

(1,3),(1,8),(2,4),(3,9),(3,10),(5,7),(6,7),(7,8),(8,9)},试求:画出该连通图及以顶点1为根的深度优先生成树。

解答:

4 / 10

.

四、算法阅读题(本题10分)

26.设计算法实现以链表作存储结构,将线性表中前m个元素和后n个元素进行整体互换,

即(a1,…,am,b1,…,bn) 改变成(b1,…,bn,a1,…,am)。阅读算法,在横线处填入语句或注释。 void exchange_L( Linklist &L,int m ) {

// 本算法实现单链表中前m个结点和后n个结点的整体互换 if ( m && L->next ) { // 链表不空且 p = L->next;

(1)

while( k< m && p ) { //(2)

p = p->next; ++k; } // while

if (p && (3)) { // n!=0 时才需要修改指针 ha = L->next; // 以指针 ha 记a1结点的位置

(4)= p->next; // 将 b1 结点链接在头结点之后 p->next = NULL; // 设am的后继为空 q = L->next; // 令q 指向 b1结点

5 / 10

while (q->next)

q = q->next; // 查找 bn 结点 q->next = ha; // (5) } // if(p) } // if(m) } // exchange_L

解答: (1)k = 1;

(2)查找第am个结点 (3)p->next (4)L->next

(5)将第 a1 结点链接到 bn 结点之后

五、算法阅读题(本题10分)

27.设任意n个整数存放于数组A(1:n)中,阅读算法,指出功能及分析指针i和j的作用。

void Arrange(int A[],int n) { // n个整数存于数组A中

int i=0,j=n-1,x; // 数组下标从0开始 while(iwhile(i0) i++; while(ix=A[i]; A[i++]=A[j]; A[j--]=x; }// if }// while

}//Arrange

(1) 功能: 解答:

1.把数组中从A(1:n)->A(1:0)中第一个大于0的数,赋给数组中从A(1:0)->A(1:n)中第一个小于0的后面第一个数组;

2.把数组中从A(1:0)->A(1:n)中第一个小于0的数,赋给数组中从A(1:n)->A(1:0)中第一个大于0的后面第一个数组;

(2)指针i和j的作用:

6 / 10

解答:

I为计数器作用,从0开始递增1关系,递增到数组中从低到高第一个小于0截止 J为计数器作用,从大数开始递减1关系,递减到数组中从高到低第一个大于0截止 六、算法设计题(本题10分)

28.设计算法purge_Sq实现删除顺序表SqList中重复元素,指出其算法的时间复杂度。 解答:

void purge_Sq( SqList &L ) {// 删除顺序表L中的重复元素 k = -1;// k 指示新表的表尾

for (i=0; iwhile(j<=k && L.elem[j]!=L.elem[i])

++j; // 在新表中查询是否存在和L.elem[i]相同的元素 if ( k==-1 || j>k )// k=-1 表明当前考察的是第一个元素 L.elem[++k] = L.elem[i]; } // for

L.length = k+1;// 修改表长 } // purge_Sq

此算法的时间复杂度为O (L.length2 )。 七、算法设计题(本题10分)

29.设计算法从图的邻接表结构转换成邻接矩阵结构的算法。 解答:

#include #include #include

int a[100][100];//邻接矩阵的载体 typedef struct ArcNode{ int adjvex;

struct ArcNode *nextarc; }ArcNode; //表结点 typedef struct VNode{ char data;

ArcNode *firstarc;

}VNode,AdjList[20];//头结点 typedef struct{

AdjList vertices; int vexnum,arcnum; }ALGraph;//邻接表

int LocateVex(ALGraph G,char e) {

int i;

7 / 10

for(i=0;iif(G.vertices[i].data==e) return i;//找到后 返回i }

return -1; }

void CreatAdList(ALGraph &G)

{//根据输入的有向图G的顶点数及边数,建立图G的邻接表 int i,j,k; char v1,v2;

ArcNode *s,*p;

scanf(\"%d%d\ getchar();

for(i=0;iscanf(\"%c\ getchar();

G.vertices[i].firstarc=NULL; }

for(i=0;iprintf(\"%c \ }

printf(\"\\n\");

for(k=0;kscanf(\"%c %c\ getchar();

i=LocateVex(G,v1); j=LocateVex(G,v2);

s= (ArcNode *)malloc(sizeof(ArcNode)); s->adjvex=j;

s->nextarc=NULL;

p=G.vertices[i].firstarc; if(!p) {

G.vertices[i].firstarc = s; } else

8 / 10

{

while(p->nextarc) p=p->nextarc; p->nextarc=s; } } }

void trans(ALGraph G) {//转换函数 int i,j; ArcNode *p;

for(i=0;i<=G.vexnum;i++)//先初始化,全部赋值为0 for(j=0;j<=G.vexnum;j++) {

a[i][j]=0; }

for(i=0;ip=G.vertices[i].firstarc; while(p) {

a[i][p->adjvex]=1; p=p->nextarc; } } }

void Output(ALGraph &G) {

int i,j;

for(i=0;ifor(j=0;jprintf(\"%d \ }

printf(\"\\n\"); } }

int main() {

9 / 10

ALGraph G;

printf(\"有向图处理篇\\n\"); CreatAdList(G); trans(G); Output(G); return 0; }

10 / 10

因篇幅问题不能全部显示,请点此查看更多更全内容