山东财经大学 - 数据结构试题

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

4 2 4 4 2 4 2 2 5 4 8 2 3 8 4 5 5 8 4 3 2 5 图12

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

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

37

六、编写算法(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

二、填空题

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

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

2

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

38

4. 树的链式存储结构略,二叉树略

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

四、算法设计题 1.

设有一组初始记录关键字序列(K1,K2,?,Kn),要求设计一个算法能够在O(n)的时间复杂度内将线性表划分成两部分,其中左半部分的每个关键字均小于Ki,右半部分的每个关键字均大于等于Ki。 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

设有两个集合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;} }

}

39

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

一、选择题

1.B 6.B

2.B 7.D

3.A 8.C

4.A 9.B

5.A 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 9. O(1) 10. i/2,2i+1

11. (5,16,71,23,72,94,73) 12. (1,4,3,2)

13. j+1,hashtable[j].key==k 14. return(t),t=t->rchild

40

联系客服:779662525#qq.com(#替换为@)