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

被折叠的 条评论
为什么被折叠?



