1、1数据结构试卷(三)一、选择题(每题 1 分,共 20 分)1设某数据结构的二元组形式表示为 A=(D,R),D=01,02,03,04,05,06,07,08,09,R=r ,r=, , ,则数据结构 A 是( ) 。(A) 线性结构 (B) 树型结构 (C) 物理结构 (D) 图型结构2下面程序的时间复杂为( )for(i=1,s=0; inext;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
2、) q=p-next;p-data=q-data;free(q);4设有 n 个待排序的记录关键字,则在堆排序中需要( )个辅助记录单元。(A) 1 (B) n (C) nlog2n (D) n25设一组初始关键字记录关键字为(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,216设二叉排序树中有 n 个结点,则在二叉排序树的
3、平均平均查找长度为( ) 。(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,2e8. 设某强连通图中有 n 个顶点,则该强连通图中至少有( )条边。(A) n(n-1) (B) n+1 (C) n (D) n(n+1)9设有 5000 个待排序的记录关键字,如果需要用最快的方法选出其中最小的 10 个记录关键字,则用下列( )方法可以达到此目的。(A) 快速排序 (B) 堆排序 (C) 归并排序 (D) 插入排
4、序10.下列四种排序中( )的空间复杂度最大。(A) 插入排序 (B) 冒泡排序 (C) 堆排序 (D) 归并排序二、填空殖(每空 1 分 共 20 分)1. 数据的物理结构主要包括_和_两种情况。2. 设一棵完全二叉树中有 500 个结点,则该二叉树的深度为_;若用二叉链表作为该完全二叉树的存储结构,则共有_个空指针域。3. 设输入序列为 1、2、3,则经过栈的作用后可以得到_种不同的输出序列。24. 设有向图 G 用邻接矩阵 Ann作为存储结构,则该邻接矩阵中第 i 行上所有元素之和等于顶点 i 的_,第 i 列上所有元素之和等于顶点 i 的_。5. 设哈夫曼树中共有 n 个结点,则该哈夫
5、曼树中有_个度数为 1 的结点。6. 设有向图 G 中有 n 个顶点 e 条有向边,所有的顶点入度数之和为 d,则 e 和 d 的关系为_。7. _遍历二叉排序树中的结点可以得到一个递增的关键字序列(填先序、中序或后序) 。8. 设查找表中有 100 个元素,如果用二分法查找方法查找数据元素 X,则最多需要比较_次就可以断定数据元素 X 是否在查找表中。9. 不论是顺序存储结构的栈还是链式存储结构的栈,其入栈和出栈操作的时间复杂度均为_。10. 设有 n 个结点的完全二叉树,如果按照从自上到下、从左到右从 1 开始顺序编号,则第 i 个结点的双亲结点编号为_,右孩子结点的编号为_。11. 设一
6、组初始记录关键字为(72,73,71,23,94,16,5),则以记录关键字 72 为基准的一趟快速排序结果为_。12. 设有向图 G 中有向边的集合 E=,则该图的一种拓扑序列为_。13. 下列算法实现在顺序散列表中查找值为 x 的关键字,请在下划线处填上正确的语句。struct recordint key; int others;int hashsqsearch(struct record hashtable ,int k)int i,j; j=i=k % p;while (hashtablej.key!=k if (i=j) return(-1);if (_ ) return(j); e
7、lse return(-1);14. 下列算法实现在二叉排序树上查找关键值 k,请在下划线处填上正确的语句。typedef struct nodeint key; struct node *lchild; struct node *rchild;bitree;bitree *bstsearch(bitree *t, int k) if (t=0 ) return(0);else while (t!=0)if (t-key=k)_; else if (t-keyk) t=t-lchild; else_;三、计算题(每题 10 分,共 30 分)1.已知二叉树的前序遍历序列是 AEFBGCDHIK
8、J,中序遍历序列是 EFAGBCHKIJD,画出此二叉树,并画出它的后序线索二叉树。2已知待散列的线性表为(36,15,40,63,22) ,散列用的一维地址空间为06 ,假定选用的散列函数是 H(K)= K mod 7,若发生冲突采用线性探查法处理,试:(1)计算出每一个元素的散列地址并在下图中填写出散列表: 0 1 2 3 4 5 6(2)求出在查找每一个元素概率相等情况下的平均查找长度。3已知序列(10,18,4,3,6,12,1,9,18,8)请用快速排序写出每一趟排序的结果。3四、算法设计题(每题 15 分,共 30 分)1 设计在单链表中删除值相同的多余结点的算法。2 设计一个求结
9、点 x 在二叉树中的双亲结点算法。4数据结构试卷(三)参考答案一、选择题1.B 2.B 3.A 4.A 5.A6.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,5013. 54. 出度,入度5. 06. e=d7. 中序8. 79.
10、 O(1)10. i/2,2i+111. (5,16,71,23,72,94,73)12. (1,4,3,2)13. j+1,hashtablej.key=k14. return(t),t=t-rchild第 8 小题分析:二分查找的过程可以用一棵二叉树来描述,该二叉树称为二叉判定树。在有序表上进行二分查找时的查找长度不超过二叉判定树的高度 1+log2n。三、计算题1 AEBFGCDHKJNUL2、H(36)=36 mod 7=1; H (22)=(1+1) mod 7=2; .冲突H(15)=15 mod 7=1;.冲突 H2(22)=(2+1) mod 7=3; 5H (15)=(1+1
11、) 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 663 36 15 22 40(2)ASL= 6.53、(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,181,3, 4,6,8,9,10,12,18,18四、算法设计题1. 设计在单链表中删除值相同的多余结点的算法。typedef int datatype;typedef
12、 struct node datatype data; struct node *next;lklist;void delredundant(lklist *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;else s=q,q=q-next;2. 设计一个求结点 x 在二叉树中的双亲结点算法。typedef struct node datatype data; struct node *lchild,*rchild; bitree;bitree
13、 *q20; int r=0,f=0,flag=0;void preorder(bitree *bt, char x)if (bt!=0 return;else r=(r+1)% 20; qr=bt; preorder(bt-lchild,x); preorder(bt-rchild,x); void parent(bitree *bt,char x)int i;preorder(bt,x);for(i=f+1; ilchild-data=x | qi-rchild-data) break;if (flag=0) printf(“not found xn“);6else if (idata); else printf(“not parent“);