当前位置:首页 > 南邮通达2015数据结构B刷题试题及答案
数据结构试卷(三)
一、选择题(每题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
共分享92篇相关文档