您的位置: 网站首页 > 程序开发 > 数据结构 > 附录 习题答案 > 【第7章 查 找】

第7章 查 找

 

1选择题

BBCDB  CDBBA

2填空题

1(n+1)/2((n+1)*log2(n+1))/(n-1)(s2+2s+n)/2slog2 (n/s+1)+s/21+aa为装填因子) 

2)哈希表查找方法

3)顺序存储结构,有序的

4)索引,块

515

6)素数

7124853.7

8O(n)O(log2 n)O(n1/2)

3问答题

1)略。

2)构造相应的判定树,如图A-14所示(图中节点的值对应元素的关键字),先找中间节点45,再找7795,最后找到82,经过4次比较。

A-14  一棵判定树

3)平均时间为(1+2+3+4+…+n)/n=(n+1)/2

4)依次为GADABGLA2A3A4E

a)溢出时,使用线性探测法   b)溢出时,使用链地址法

4上机操作题

1)按中序遍历二叉排序树可得到一个按键值从小到大排列的有序表,利用这个特点来判断二叉树是否为二叉排序树,算法如下:

# define max 999

# define mix 0

int judge(BTnode*bt)

{

    BTmode*s[max],*p=bt;

    int top=0,preval=min;

    do{

        while(p)

        {

            s[top++]=p;

            p=p->lchild;

        }

        if(top>0)

        {

            p=s[--top];

        if(p->data<preval)

            return(0);

        preval=p->data;

        p=p->rchild;

        }

    }while(p||top>0);

    Return(1);

}  

2算法如下

#define max 1000

void order(BTnode *t,int x)

{

    int top=0;

    do{

        while(p)

        {

            s[top++]=p;

            p=p->rchild;

        }

        if(top>0)

        {

            p=s[--top]

            if(p->data<x)

            return;

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

            p=p->lchild;

        }

    }while(top>0||p);

}

3)表中节点类型定义如下:

typedef struct node{int data;

struct node*next;}Lnode;

算法描述如下

void Searchlen(Lnode*HT[ ],int m)

{

    Lnode*p;

    int j=0,i,n;

    fliat ss=0.0,su=0.0;

    for(i=0;i<m;i++)

    {

        p=HT[i];

        n=0;

        while(p)

        {

            n+ +;

            j++;

            ss+=n;

            p=p->next;

        }

        su+=n;

        }

    ss=ss/j;

    su=su/m;

    printf("ASL =%f",ss);

    printf("ASL =%f",su);

}