电子科技大学 期末 数据结构 模拟题及答案 下载本文

}

三、算法设计题(22分)

1. 设计在链式存储结构上合并排序的算法。 2. 设计在二叉排序树上查找结点X的算法。

3. 设关键字序列(k1,k2,?,kn-1)是堆,设计算法将关键字序列(k1,k2,?,kn-1,x)调

整为堆。

25

数据结构试卷(一)参考答案

一、选择题(每题2分,共20分)

1.A 2.D 3.D 4.C 5.C 6.D 7.D 8.C 9.D 10.A 二、填空题(每空1分,共26分)

1. 正确性 易读性 强壮性 高效率 2. O(n)

3. 9 3 3

4. -1 3 4 X * + 2 Y * 3 / - 5. 2n n-1 n+1 6. e 2e 7. 有向无回路

8. n(n-1)/2 n(n-1)

9. (12,40) ( ) (74) (23,55,63) 10.增加1

11.O(log2n) O(nlog2n) 12.归并

三、计算题(每题6分,共24分)

1. 线性表为:(78,50,40,60,34,90)

?0?1??1??1?02. 邻接矩阵:?1110?0101??1011??0101?1110??

邻接表如图11所示:

图11

3. 用克鲁斯卡尔算法得到的最小生成树为: (1,2)3, (4,6)4, (1,3)5, (1,4)8, (2,5)10, (4,7)20

4. 见图12

2 4 4 2 2

图12 2 4 4 5 4 5 8

2

3 5 4 8 26

2 4 8 3 5

四、读算法(每题7分,共14分) 1. (1)查询链表的尾结点

(2)将第一个结点链接到链表的尾部,作为新的尾结点 (3)返回的线性表为(a2,a3,?,an,a1) 2. 递归地后序遍历链式存储的二叉树。 五、法填空(每空2分,共8 分)

true BST->left BST->right 六、编写算法(8分)

int CountX(LNode* HL,ElemType x)

{ int i=0; LNode* p=HL;//i为计数器 while(p!=NULL)

{ if (P->data==x) i++; p=p->next;

}//while, 出循环时i中的值即为x结点个数 return i; }//CountX

数据结构试卷(二)参考答案

一、选择题

1.D 2.B 3.C 4.A 5.A 6.C 7.B 8.C

二、填空题

1. 构造一个好的HASH函数,确定解决冲突的方法 2. stack.top++,stack.s[stack.top]=x 3. 有序

2

4. O(n),O(nlog2n) 5. N0-1,2N0+N1 6. d/2

7. (31,38,54,56,75,80,55,63) 8. (1,3,4,5,2),(1,3,2,4,5)

三、应用题

1. (22,40,45,48,80,78),(40,45,48,80,22,78) 2. q->llink=p; q->rlink=p->rlink; p->rlink->llink=q; p->rlink=q; 3. 2,ASL=91*1+2*2+3*4+4*2)=25/9 4. 树的链式存储结构略,二叉树略

5. E={(1,3),(1,2),(3,5),(5,6),(6,4)} 6. 略

四、算法设计题

1. 设有一组初始记录关键字序列(K1,K2,?,Kn),要求设计一个算法能够在O(n)的时

间复杂度内将线性表划分成两部分,其中左半部分的每个关键字均小于Ki,右半部分的每个关键字均大于等于Ki。

27

void quickpass(int r[], int s, int t) {

int i=s, j=t, x=r[s]; while(i

while (ix) j=j-1; if (i

r[i]=x; }

2. 设有两个集合A和集合B,要求设计生成集合C=A∩B的算法,其中集合A、B和C用

链式存储结构表示。

typedef struct node {int data; struct node *next;}lklist; void intersection(lklist *ha,lklist *hb,lklist *&hc) {

lklist *p,*q,*t;

for(p=ha,hc=0;p!=0;p=p->next)

{ for(q=hb;q!=0;q=q->next) if (q->data==p->data) break;

if(q!=0){ t=(lklist *)malloc(sizeof(lklist)); t->data=p->data;t->next=hc; hc=t;} }

}

数据结构试卷(三)参考答案

一、选择题

1.B 2.B 3.A 4.A 5.A 6.B 7.D 8.C 9.B 10.D

第3小题分析:首先用指针变量q指向结点A的后继结点B,然后将结点B的值复制到结点A中,最后删除结点B。

第9小题分析:9快速排序、归并排序和插入排序必须等到整个排序结束后才能够求出最小的10个数,而堆排序只需要在初始堆的基础上再进行10次筛选即可,每次筛选的时间复杂度为O(log2n)。

二、填空题

1. 顺序存储结构、链式存储结构 2. 9,501 3. 5

4. 出度,入度 5. 0 6. e=d 7. 中序 8. 7

28