中国海洋大学2012016学年数据结构期末考试试卷及参考答案B
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中国海洋大学2015-2016学年期末考试试卷及参考答案 试题名称:数据结构 _____ B 卷
专业年级 计算机 学号 --------------- 姓名 ----------- 授课教师 分数 --------- 要求:算法描述用C 语言,对算法中用到的数据结构要加以说 明描述。
一、解答下列各题(60分,每小题10分)
1.已知下图为广义表的存储结构图,写出该图表示的广义表, 并求该广义表的长度和深度。
如下要求:(1)画出该有向图;(2)画出邻接表。
3 .已知一棵3阶B-树如图所示,分别画出插入关键字20后和删 除关键字150后得到的B-树。
list
2.
4.给出一组关键字T=(12, 2, 16, 30, 8, 28, 4, 10, 20, 6, 18)。
写出用下列算法从小到大排序时第一趟结束时的序列。
(1)希尔排序(第一趟排序的增量为5)
(2)快速排序(第一个元素为轴元素)
5.画出和下列已知序列对应的树T:树的先根次序访问序列为GFKDAIEBCHJ;树的后根次序访问序列U为DIAEKFCJHBG
6.设有一组关键字{9, 01, 23, 14, 55, 20, 84, 27},采用哈希函数:H(key)=key MOD 7,表长为10,用开放地址法的二次探测再散列方法Hi=(H(key)+di) MOD 10 (di=12, 22, 32,…)解决冲突。
要求:对该关键字序列构造哈希表,指出有哪些同义词并计算查
找成功的平均查找长度。
二、(10分)有一非空树,其度为5,已知度为i的节点数有i个,其中1<= i <=5,证明其终端节点个数为41。
三、(15分)算法设计:设二叉排序树已经以二叉链表的形式存储,使用递归方法,求各结点的平衡因子并输出。
四、(15分)假设在长度大于1的单循环链表中,既无头结点也无头指针。
S为指向链表中某个节点的指针,试编写算法删除节点*s 的直接前驱结点。
期末考试参考答案 科目名称:数据结构
广义表 list 二((x,(y )),(((())),(),(z ))) (6 分)
2 深度为4 (各2分)
一一> 1. (10 分) 长度为 2.解答::(10分) ②再删除(150)后的3阶B-树如下图所示。
有向图和邻接表分别为:
共4页第1 页
4.解答:(10分,每小题各5分)
(1)希尔排序第一趟结果:
12, 2, 10, 20, 6, 18, 4, 6, 30, 8, 28
(2)快速排序第一趟结果:
6, 2, 10, 4, 8, 12, 28, 30, 20, 16, 18
5.(10分,酌情扣分)对应的树为:
6、解答(10分,酌情扣分)得到的哈希表为:
填入比较次数后的HT值
同义词有:9和23 14和84 20和55和27
查找成功时的平均长度为:ASL=(1+1+1+2+3+4+1+2)/8=1.875 二、【证明】(10分,若思路正确,可得满分,其余可酌情扣分)
若n为节点总数,ni为度i的节点数,则
n=n0+n1+n2+n3+n4+n5 ①
令B为分支数目,8=口-1 ②
所有度分别由度为1,2, 3, 4, 5的节点所提供
故 B=n-1= n1+2n2+3n3+4n4+5n5 ③
由①、②及③知 n0= n2+2n3+3n4+4n5+1
由题意知:n2=2, n3=3, n4=4, n5=5,故
n0=2+2*3+3*4+4*5+1=41
共~~第~
三、解答:(15分,酌情扣分)
基本思想:
(1)若平衡二叉树为空,则返回其高度为0;
(2)若平衡二叉树的左右子树为空,则返回其高度为1;否则返回左右子树最大
高度加1;
(3)任意节点的平衡因子为左右子树高度之差。
Typedef struct BSTnode{
int bf;
elemtype data;
struct BSTnode *lchild,*rchild;
}*BSTree
Int computebf(BSTree bst)
{ int max1,max2;
If (bst= =null)return 0;
If(bst->lchild= =null&& bst->rchild= =null )
{ bst->bf=0;
Printf(bst->data);printf(bst->bf);
Return 1;
}
Else{ max1=computebf(bst->lchild);
Max2=computebf(bst->rchild);
bst->bf=max1-max2;
Printf(bst->data);printf(bst->bf);
Return(max(max1,max2)+1);
}
共4页第3 页
四、解答:(15分,酌情扣分)
DeletePre(LinkList s){ 〃删除 s 的直接前驱
ListNode *p;
p = s;
while(p->next->next != s) p = p->next; 〃寻找 $的直接前驱的直接前驱
free(p-next);
p->next = s;
共4页第3 页。