南邮通达2015数据结构B刷题试题及答案 联系客服

发布时间 : 星期日 文章南邮通达2015数据结构B刷题试题及答案更新完毕开始阅读58edaf846c85ec3a86c2c560

数据结构试卷(三)

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

1.设某数据结构的二元组形式表示为A=(D,R),D={01,02,03,04,05,06,07,08,09},R={r},r={<01,02>,<01,03>,<01,04>,<02,05>,<02,06>,<03,07>,<03,08>,<03,09>},则数据结构A是( )。

(A) 线性结构

(B) 树型结构 (C) 物理结构 (D) 图型结构

2.下面程序的时间复杂为( )

for(i=1,s=0; i<=n; i++) {t=1;for(j=1;j<=i;j++) t=t*j;s=s+t;}

(A) O(n)

(B) O(n2)

(C) O(n3)

(D) O(n4)

3.设指针变量p指向单链表中结点A,若删除单链表中结点A,则需要修改指针的操作序列为( )。

(A) q=p->next;p->data=q->data;p->next=q->next;free(q); (B) q=p->next;q->data=p->data;p->next=q->next;free(q);

(C) q=p->next;p->next=q->next;free(q); (D) q=p->next;p->data=q->data;free(q);

4.设有n个待排序的记录关键字,则在堆排序中需要( )个辅助记录单元。 (A) 1

(B) n

(C) nlog2n

(D) n2

5.设一组初始关键字记录关键字为(20,15,14,18,21,36,40,10),则以20为基准记录的一趟快速排序结束后的结果为( )。 (A) 10,15,14,18,20,36,40,21

(B) 10,15,14,18,20,40,36,21 (C) 10,15,14,20,18,40,36,2l (D) 15,10,14,18,20,36,40,21

9

6.设二叉排序树中有n个结点,则在二叉排序树的平均平均查找长度为( )。

(A) O(1)

(B) O(log2n)

(C)

(D) O(n2)

7.设无向图G中有n个顶点e条边,则其对应的邻接表中的表头结点和表结点的个数分别为( )。

(A) n,e

(B) e,n

(C) 2n,e

(D) n,2e

8. 设某强连通图中有n个顶点,则该强连通图中至少有( )条边。

(A) n(n-1)

(B) n+1

(C) n

(D) n(n+1)

9.设有5000个待排序的记录关键字,如果需要用最快的方法选出其中最小的10个记录关键字,则用下列( )方法可以达到此目的。

(A) 快速排序

(B) 堆排序

(C) 归并排序 (D) 插入排序

10.下列四种排序中( )的空间复杂度最大。 (A) 插入排序

三、计算题(每题10分,共30分)

1.已知二叉树的前序遍历序列是AEFBGCDHIKJ,中序遍历序列是EFAGBCHKIJD,画出此二叉树,并画出它的后序线索二叉树。

AEFGBCDHFKJ(B) 冒泡排序 (C) 堆排序 (D) 归并排序

NULL 2.已知待散列的线性表为(36,15,40,63,22),散列用的一维地址空间为[0..6],假定选用的散列函数是H(K)= K mod 7,若发生冲突采用线性探查法处理,试: H(36)=36 mod 7=1; H1(22)=(1+1) mod 7=2; ….冲突

10

H(15)=15 mod 7=1;….冲突 H2(22)=(2+1) mod 7=3; H1(15)=(1+1) mod 7=2; H(40)=40 mod 7=5; H(63)=63 mod 7=0; H(22)=22 mod 7=1; ….冲突

(1)计算出每一个元素的散列地址并在下图中填写出散列表:

` 0 1 2 3 4 5 6

63 36 15 22 40 (2)求出在查找每一个元素概率相等情况下的平均查找长度。 ASL=

1?2?1?1?3?1.6

53.已知序列(10,18,4,3,6,12,1,9,18,8)请用快速排序写出每一趟排序的结果。

(8,9,4,3,6,1),10,(12,18,18) (1,6,4,3),8,(9),10,12,(18,18) 1,(3,4,6),8,9,10,12,18,(18) 1,3,(4,6),8,9,10,12,18,18 1,3, 4,6,8,9,10,12,18,18

四、算法设计题(每题15分,共30分)

1.设计在单链表中删除值相同的多余结点的算法。 设计在单链表中删除值相同的多余结点的算法。

typedef int datatype;

typedef struct node {datatype data; struct node *next;}lklist; void delredundant(lklist *&head) {

lklist *p,*q,*s;

for(p=head;p!=0;p=p->next) {

for(q=p->next,s=q;q!=0; )

if (q->data==p->data) {s->next=q->next; free(q);q=s->next;}

11

else {s=q,q=q->next;} } }

2.设计一个求结点x在二叉树中的双亲结点算法。 设计一个求结点x在二叉树中的双亲结点算法。

typedef struct node {datatype data; struct node *lchild,*rchild;} bitree; bitree *q[20]; int r=0,f=0,flag=0; void preorder(bitree *bt, char x) {

if (bt!=0 && flag==0)

if (bt->data==x) { flag=1; return;} else {r=(r+1)% 20; q[r]=bt; preorder(bt->lchild,x);

preorder(bt->rchild,x); }

}

void parent(bitree *bt,char x) {

int i;

preorder(bt,x);

for(i=f+1; i<=r; i++) if (q[i]->lchild->data==x || q[i]->rchild->data) break;

if (flag==0) printf(\

else if (i<=r) printf(\}

12