数据结构c语言版第9章答案,056312409数据结构(C语言版)(夏燕张兴科)--习题答案--第9章.doc...

数据结构与算法习题解析
本文解析了《数据结构(C语言版)》第九章的部分习题,包括顺序查找算法和折半查找方法的具体实现及应用。同时介绍了如何构建最佳二叉排序树,并给出了一种二叉链表结点类型的定义。

056312409数据结构(C语言版)(夏燕张兴科)--习题答案--第9章

9.7.1 习题与上机操作习题

⑷ 结点数n,生成过程

⑸ 越大,越小

⑺ 顺序存储结构 有序的

⑻ 右子树

⑼ 素数

⑽ 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=;

while (ST.elem[i].key != kx )   /*从表尾开始查找*/

i ;

if (i == ST.length +1)

printf(“Searching Fail!\n”);

else

printf(“Searching Success!\n”);

return( i ) ; /*找到,返回结点的序号,否则返回0*/

}在等概率情况下查找成功

查找成功对有序数据表(5,7,9,12,15,18,20,22,25,30,100),用折半查找方法查找关键字为和的数据。

① 查找关键字kx=的过程:

1234567891011820222530100↑↑↑lowmidhigh因为<8,修改high=mid-1=5,重新选择mid。

1234567891011↑↑↑lowmidhigh因为>,修改low=mid+1=4,重新选择mid。

1234567891011↑↑↑lowlow=midhigh这时LAB.elem[mid].key=即为所求,返回该mid值。

② 查找关键字kx=的过程:

1234567891011↑↑↑lowmidhigh因为>,修改low=mid+1=7,重新选择mid。

1234567891011↑↑↑lowmidhigh因为,修改=mid+1=10,重新选择mid。

1234567891011820222530100↑↑↑low=midhigh因为,修改=mid-1=10,重新选择mid。

1234567891011820222530100↑↑↑low=mid=high因为,修改=mid-1=9,此时low>high,说明表中没有关键字等于的结点,查找不成功。123456789101157912151820222530100↑↑↑highlow=mid⑶ 关键字为{7,5,8,16,12,18,14,6,4,10,9,13,15,17,20}最佳二叉排序树(平均查找长度最小)

含有相同结点的二叉排序树是不惟一的,因此有n个结点的二叉排序树的平均查找长度和树的结构有关。例如,当关键字递增有序时,按照二叉排序树构造方法产生的二叉排序树是一棵右单只树,在该树上进行查找就蜕变为顺序查找。最好情况是二叉排序树的形态和折半查找的判定树相同,其平均查找长度与log2n是等数量级的,所以需要将构造的二叉排序树转换为平衡的二叉排序树,即最佳二叉排序树以二叉链表作为二叉查找树的存储结构,二叉链表结点的类型定义如下typedef struct Bitnode

{elemtype elem;      /*结点的值域*/

struct Bitnode *lchild, *rchild; /*左、右指针域*/

}Bitree;           /*二叉链表结点类型*/

Bitree **t,keytype ke

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值