056312409数据结构(C语言版)(夏燕张兴科)--习题答案--第9章
9.7.1 习题与上机操作
9.7.1习题
⒈ 选择题 ⑴ ⑻ B B ⑵ ⑼ C B ⑶ ⑽ C A ⑷ D ⑸ D ⑹ C ⑺ A ⒉ 填空题 ⑴ 哈希表查找法 ⑵ 15
⑶ log2?n??1
⑷ 结点数n,生成过程 ⑸ 越大,越小 ⑹ ASL?1(1?n) 2n?1(n?1)ASL?log2?1
n1nASL?(?s)?1
2s⑺ 顺序存储结构 有序的 ⑻ 右子树 ⑼ 素数 ⑽ n n+1 ⒊ 应用题
⑴ 顺序表类型定义
#define MAX 100 /* 顺序表长度*/ typedef int elemtype /* 关键字类型为整数*/
typedef struct
{ elemtype elem[MAX+1] ;
/*查找表数据元素存储空间基址,建表时按实际长度分配,0号单元留空*/ int length ; /*表中元素个数*/ }SStable ; /*顺序表类型*/ 顺序查找算法(监视哨设在高下标端) int SeqSearch(SStable ST, keytype kx) {int i ;
ST.elem[length+1].key=kx; /*设置哨兵*/ i=1;
while (ST.elem[i].key != kx ) /*从表尾开始查找*/ i++ ;
if (i == ST.length +1)
printf(“Searching Fail!\\n”); else
printf(“Searching Success!\\n”);
return( i ) ; /*找到,返回结点的序号,否则返回0*/
}
在等概率情况下, 表长为n:
查找成功的平均查找长度 ASL=
n?1 2查找不成功的平均查找长度 ASL=n+1
⑵ 对有序数据表(5,7,9,12,15,18,20,22,25,30,100),用折半查找方法查找关键字为12和28的数据。
① 查找关键字kx=12的过程:
1 5 ↑ low
2 7
3 9
4 12
5 15
6 18 ↑ mid
7 20
8 22
9 25
10 30
11 100 ↑ high
因为12<18,修改high=mid-1=5,重新选择mid。
1 5 ↑ low 1 5 low
2 7 2 7
3 9 ↑ mid 3 9
4 12 4 12 ↑↑ low=mid
5 15 ↑ high 5 15 ↑ high
6 18 6 18
7 20 7 20
8 22 8 22
9 25 9 25
10 30 10 30
11 100 11 100
因为12>9,修改low=mid+1=4,重新选择mid。
这时LAB.elem[mid].key=12即为所求,返回该mid值。 ② 查找关键字kx=28的过程:
1 5 ↑ low
2 7
3 9
4 12
5 15
6 18 ↑ mid
7 20
8 22
9 25
10 30
11 100 ↑ high
因为28>18,修改low=mid+1=7,重新选择mid。
1 5
2 7
3 9
4 12
5 15
6 18
7 20 ↑ low
8 22
9 25 ↑ mid
10 30
11 100 ↑ high
因为28>25,修改low=mid+1=10,重新选择mid。
1 5
2 7
3 9
4 12
5 15
6 18
7 20 8 22
9 25
10 30 ↑↑
11 100 ↑
low=mid high
因为28<30,修改high=mid-1=10,重新选择mid。
1 5
2 7
3 9
4 12
5 15
6 18
7 20
8 22
9 25
10 30 ↑↑↑ low=mid=high
11 100
因为28<30,修改high=mid-1=9,此时low>high,说明表中没有关键字等于28的结点,查找不成功。
1 5
2 7
3 9
4 12
5 15
6 18
7 20
8 22
9 25 ↑ high
10 30 ↑↑ low=mid
11 100
⑶ 关键字为{7,5,8,16,12,18,14,6,4,10,9,13,15,17,20}的最佳二叉排序树(平均查找长度最小)如下
127546891013141517161820
含有相同结点的二叉排序树是不惟一的,因此有n个结点的二叉排序树的平均查找长度和树的结构有关。例如,当关键字递增有序时,按照二叉排序树构造方法产生的二叉排序树是一棵右单只树,在该树上进行查找就蜕变为顺序查找。最好情况是二叉排序树的形态和折半查找的判定树相同,其平均查找长度与log2n是等数量级的,所以需要将构造的二叉排序树转换为平衡的二叉排序树,即最佳二叉排序树。
⑷ 以二叉链表作为二叉查找树的存储结构,二叉链表结点的类型定义如下
typedef struct Bitnode
{elemtype elem; /*结点的值域*/ struct Bitnode *lchild, *rchild; /*左、右指针域*/ }Bitree; /*二叉链表结点类型*/
int DelNode(Bitree **t,keytype key)
{ Bitree *p,*q,*s,**f; /* p指针指向待删结点,双亲结点为f*/
int flag=0; p=t;
if (SearchB(*t,&p,&q,kx)) /* 调用二叉查找树查找算法*/ { flag=1; /* 查找成功,置删除成功标志*/ if (p==q) /* 待删结点为根结点*/ f=t;
else /*待删结点为非根结点*/ { f=&(p->lchild); if (kx>p->elem.key)
f=&(p->rchild); /* f指向待删结点的父结点的相应指针域*/ }
if (!q->rchild)
*f=q->lchild; /* 待删结点无右子树,以左子树替换待删除结点*/ else
{ if (!q->lchild)
*f=q->rchild; /*待删结点无左子树,以右子树替换待删除结点*/ else /* 待删结点既有左子树,又有右子树*/ { p=q->rchild; s=p;
while (p->lchild) /* 在右子树上搜索待删结点的后继p*/ { s=p; p=p->lchild; } *f=p;
s->lchild=q->lchild; /* 替换待删结点q,重接左子树*/ if (s != p) /* 待删结点的右孩子有左子树,则要重接右子树*/ { s->lchild=p->rchild; p->rchild=q->rchild; } } } delete q; } return flag; }
⑸ 解 根据题意,平方探测再散列法的下一地址计算公式为: d1=Hash(key)
d2j=(d1+j*j)%m
d2j+1=(d1-j*j)%m; j=1,2,? 计算函数
Hash(19)=19=6 Hash(1)=1=1 Hash(49)=49=10
Hash(23)=23=10 (发生冲突) Hash(23)=(10+1*1)=11
Hash(14)=14=1 (发生冲突) Hash(14)=(1+1*1)=2 Hash(55)=55=3 Hash(20)=20=7
Hash(84)=84=6 (发生冲突) Hash(84)=(6+1*1)=7 (仍发生冲突) Hash(84)=(6-1*1)=5
相关推荐:
- [学前教育]MC9S12XS256RMV1 xs128芯片手册4
- [学前教育]安东尼语录经典语录
- [学前教育]e级gps控制测量技术设计书
- [学前教育]苏教版2022-2022学年八年级下学期期末
- [学前教育]装修公司推广 营销
- [学前教育]家政服务合同(完整版)
- [学前教育]湖北省2016届高三联考语文试题
- [学前教育]爱立信无涯学习系统LTE题库1-LTE基础知
- [学前教育]揭秘大众柴油车作弊软件原理
- [学前教育]人才流失原因及对策分析
- [学前教育]房屋建筑施工工程劳务分包合同
- [学前教育]国际贸易实务试卷A卷09.6
- [学前教育]校园废品回收活动计划方案书范文格
- [学前教育]电大成本会计试题及答案
- [学前教育]大学物理实验 华南理工出版社 绪论答案
- [学前教育]爱丁堡产后抑郁量表
- [学前教育]液压冲击的危害、产生原因与防止方法(
- [学前教育]学生工作总结高一学生期中考试总结_020
- [学前教育]人民医院医疗废物管理规章制度大全
- [学前教育]阳光维生素的巨大抗癌潜能阅读题答案.d
- 马云在云锋基金江苏论坛闭幕式的发言
- 试论小学体育教育中的心理健康教育-教
- 语文A版一年级下册《语文乐园一》教学
- 2021四川大学物理化学考研真题经验参考
- [人教A版]2015-2016学年高中数学 第二
- 终端网点销售返利协议书
- 江苏省2015年眼科学主治医师青光眼考试
- 2017年部编人教版八年级语文上册教案
- 十一中学七年级英语上册Unit7Howmuchar
- 以赛促教的创新性实验教学机制建设实践
- 平凉市崆峒区2015七年级下生物期末试题
- 琶洲(地块五)A、B塔楼1、2#塔吊基础
- 一级医院工作制度与人员岗位职责
- 2018北京西城区高三二模理科数学试题及
- 炒股密码线技术 - 图文
- 职高学生生涯发展辅导教案
- 语文人教版四年级上册8 世界地图引出的
- 最新最新人教版二年级上册全册数学教案
- 2017高考英语全国2卷精彩试题(有问题
- 普通心理学笔记




