常州工学院数据结构作业 第9章 查找

  1. 画出对长度为10的有序表进行折半查找的判定树,并求其等概率时查找成功的平均查找长度。

         例如:长度为10的折半查找判定树的具体生成过程:

         都遵循这个规律,左孩子结点<根结点<右孩子结点

    (1)在长度为10的有序表中进行折半查找,不论查找哪个记录,都必须和中间记录进行比较,而中间记录为

(1+10)/2 =5  (注意要取整)   即判定树的根结点为5,如图7-2(a)所示。

     (2)考虑判定树的左子树,即将查找区域调整到左半区,此时的查找区间为[1,4],那么中间值为(1+4)/2 =2 (注意要取整) ,所以做孩子根结点为2,如图7-2(b)所示。

     (3)考虑判定树的右子树,即将查找区域调整到右半区,此时的查找区间为[6,10],那么中间值为(6+10)/2 =8 (注意要取整) ,所以做孩子根结点为8,如图7-2(c)所示。

       (4)重复以上步骤,依次去确定左右孩子。

 

长度为10的有序表的成功平均查找长度为:

        ASL=(1*1+2*2+3*4+4*3)/10=29/10;

 

2.已知一组关键字{49,38,65,97,76,13,27,44,82,35,50},按输入序列的顺序生成二叉排序树,只需画出最终结果。

 

3.已知散列表的地址区间为0~11,散列函数为H(k)=k % 11,采用线性探测法处理冲突,将关键字序列20,30,70,15,8,12,18,63,19依次存储到散列表中,试构造出该散列表,并求出在等概率情况下的平均查找长度。

 

 

4.设散列函数为H(k)=k % 11,采用链地址法处理冲突,将上题中关键字序列依次存储到散列表中,并求出在等概率情况下的平均查找长度。

 

 

二  编程题

1.设计一个算法,从大到小输出该二叉排序树中所有关键字不小于X的数据元素。

【提示】

若对二叉排序树中序遍历,则遍历结果的序列是递增有序的。若采取先遍历右子树,然后遍历根结点,最后遍历左子树的策略, 则遍历结果的序列是递减有序的(直到小于X为止)。

方法一:

void OutPut(BSTNode *bt,keyType k)

{

    if(bt==null)

        return ;

    if(bt->rchild!=null)

        OutPut(bt->rchild,k);

    if(bt-<data>=k)

        printf("%d",bt->data);

    if(bt->lchild!=null)

        OutPut(bt->lchild,k);

}

方法二:

void InOrder(BSTree *root,int k){

    if(!root)

        return ;

    InOrder(root->lchild,k);

    if(root->data>=k){

        visit(root);  

    }

    InOrder(root->rchild,k);

}

2.设计一个算法,求出给定二叉排序树中值为最大的结点。

【提示】二叉排序树上最大的结点肯定是右子树的最右下结点。因此,首先从根结点开始查找,然后顺着右子树查找,直到结点没有右子树为止。

keyType Maxkey(BSTNode *bt)

 {

    while(bt->rchild!=null)

        bt=bt->rchild;

    return bt->data;

}

 

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值