《软件技术基础》实验指导 实验八

查找

实验八 查找

一、实验目的

  1. 熟悉线性表、二叉排序树和散列表的查找
  2. 能够编写一些查找的算法

二、 实验内容

  1. 18个记录的关键字如下,编写分块查找的算法进行查找。

    22、12、13、8、9、20、33、42、44、38、24、48、60、58、74、49、86、53

  2. 编写一个判别给定的二叉树是否为二叉排序树的算法,设二叉树以二叉链表存储表示,结点的数据域只存放正整数。

Tips

  1. 8.1 分块查找 http://student.zjzk.cn/course_ware/data_structure/web/chazhao/chazhao9.2.3.htm
  2. 8.2 二叉排序树 https://en.wikipedia.org/wiki/Binary_search_tree

Answer

8.1

//分块查找的程序代码
#include<stdio.h>
//类型定义
typedef int keytype;
typedef struct
{
    keytype key;
    int low,high;
}index;
typedef struct
{
    keytype key;
}record;
const int recN=18;
const int idxN=3;

int blksearch(record[],index[],keytype,int);
int main()
{
    record r[recN]={22,12,13,8,9,20,33,42,44,38,24,48,60,58,74,49,86,53};
    index idx[idxN]={{22,0,5},{48,6,11},{86,12,17}};
    keytype key;
    int loc,i;
    printf("待查找的记录关键字表:\n");
    for(i=0;i<recN;i++)
        printf("%5d",r[i]);
    printf("\n");
    printf("输入所要查找记录的关键字:");
    scanf("%d",&key);
    loc=blksearch(r,idx,key,idxN);
    if(loc!=-1) printf("查找到,是第%d个记录。\n",loc+1);
    else printf("记录查找不到!\n");
    return 0;
}
//折半查找索引表,块内顺序查找
//分块查找
int blksearch(record r[],index idx[],keytype k,int n)
{
    int i,low=0,high=n-1,mid,bh,find=0;
    //折半查找索引表
    while(low<=high&&!find)
    {
        mid=(low+high)/2;
        if(k<idx[mid].key)
        {
            high=mid-1;
        }
        else if(k>idx[mid].key)
        {
            low=mid+1;
        }
        else
        {
            high=mid-1;
            find=1;
        }
    }
    if(low<n)
    {
        i=idx[low].low;//块的起始地址
        bh=idx[low].high;//块的终止地址
    }
    //块内顺序查找
    while(i<bh&&r[i].key!=k)
    {
        i++;
    }
    if(r[i].key!=k)
    {
        i=-1;
    }
    return i;
}

8.2

//判断二叉排序树的程序代码
#include<stdio.h>
#include<stdlib.h>
//#include<malloc.h>
//二叉链表的结构类型定义
const int maxsize=1024;
typedef int keytype;
typedef struct node
{
    keytype key;
    struct node *lchild,*rchild;
}bitree;

bitree*creattree();
void preorder(bitree*);
void inorder(bitree*);

//void main()
int main()
{
    bitree*pb;
    pb=creattree();
    preorder(pb);
    printf("\n");
    inorder(pb);
    printf("是二叉排序树!\n");
    return 0;
}

//二叉树的建立
bitree*creattree()
{
    keytype x;
    bitree*Q[maxsize];
    int front,rear;
    bitree*root,*s;
    root=NULL;
    front=1;rear=0;
    printf("按层次输入二叉排序树的整型结点数据,0表示虚结点,-1表示结束:\n");
    scanf("%d",&x);//输入0表示虚结点,-1表示结束
    while(x!=-1)
    {
        s=NULL;
        if(x!=0)
        {
            s=(bitree*)malloc(sizeof(bitree));
            s->key=x;
            s->lchild=NULL;
            s->rchild=NULL;
        }
        rear++;
        Q[rear]=s;
        if(rear==1)root=s;
        else
        {
            if(s&&Q[front])
                if(rear%2==0)Q[front]->lchild=s;
                else Q[front]->rchild=s;
            if(rear%2==1)front++;
        }
        scanf("%d",&x);;
    }
    return root;
}

//二叉树的输出
void preorder(bitree*p)
{
    if(p!=NULL)
    {
        printf("%d",p->key);
        if(p->lchild!=NULL||p->rchild!=NULL)
        {
            printf("(");
            preorder(p->lchild);
            if(p->rchild!=NULL) printf(",");
            preorder(p->rchild);
            printf(")");
        }
    }
}

//判断二叉排序树
keytype k =32768;
void inorder(bitree *p)
{
    if(p!=NULL)
    {
        inorder(p->lchild);
        if(p->key>k)
        {
            k=p->key;
        }
        else
        {
            printf("不是二叉排序树\n");
            exit(0);
        }
        inorder(p->rchild);
    }
}

原文地址:https://www.cnblogs.com/vanlion/p/datastructure-exp-8.html

时间: 2024-11-04 19:30:15

《软件技术基础》实验指导 实验八的相关文章

对软件技术基础的课程期望及git的初步了解

大一的c程序设计课程的学习让我对编程语言有了初步的了解,但只是在简单程序的编写上,对编程的应用毫无了解.我希望在软件技术基础这门课上,学习到如何实现从编程到一个软件的制作.另外,在平日的学习中,我少与人结伴,喜独来独往,而对团队的合作无法很好的适应,我希望通过这门课程弥补自身的不足,在软件工程的学习中学会融入团队,实现自我价值. 在此之前,我对git的了解知之甚少.通过相关资料的浏览后我了解到,git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到很大的项目版本管理.开发者可以通过在

《软件技术基础》实验指导 实验七

排序 实验七 排序 一.实验目的 熟悉各种内部排序算法 能够编写程序显示排序过程中各趟排序的结果 能够编写一些排序的算法 二.实验内容 采用希尔排序方法对顺序表中的证型数据进行排序,设计希尔排序算法并显示每趟排序的结果. 编写一个双向起泡的排序算法,即在排序过程中交替改变扫描方向,同时显示各趟排序的结果. Tips 7.1 希尔排序 https://en.wikipedia.org/wiki/Shellsort 7.2 鸡尾酒排序 https://en.wikipedia.org/wiki/Co

S1/软件技术基础/06-操作系统常用技巧

常用的DOS命令 选择“开始”→“运行”命令,然后输入“cmd”,单击“确定”按钮.此时将出现一个显示命令提示符的窗口.他是windows体系中的命令解释程序.“C:\>”称为命令提示符,该提示符包含当前正在使用的磁盘名称如我们使用C盘,D盘等,在闪动的光标处可以输入各种DOS命令,按Enter键就可以执行这些命令了. 注意:在线面列出的这些DOS命令语法中,所有“[]”和“<>”中的部分都称为参数,“[]”中的参数是可选的,“<>”中的参数是必需的,不同的参数会使命令产生不

S1/软件技术基础/07-网络相关配置

IP地址的表示方法 IP地址有32位,由4个8位的二进制数组成,每8位之间用圆点隔开,如11000000.10101000.00000010.00010100. 由于二进制不便记忆且可读性较差,所以通常都把二进制转换成十进制数表示,如196.168.2.21. 因此,一个IP地址通常用3个点分开的十进制数表示,称为点分十进制. IP地址的分类 每一个IP地址都包括两部分:网络ID和主机ID.其中,网络ID标识计算机或网络设备所在的不同网络,主机ID标识一个网络中特定的主机. IP地址的网络ID由

S1/软件技术基础/02-Word文档编辑

设置自动更正选项:单击“office按钮”→“Word选项”→“校对”→“自动更正选项”按钮,打击后打开“自动更正”对话框,我们就可以根据提示信息进行设置. 使用修订功能:单击“审阅”功能选项卡→“修订”功能面板→“修订”按钮,吃屎Word文档就进入了修订状态.而后你对他的删除和修改等操作都是红色的修订字.修订完以后,取消修订状态,别人就可以根据你的修订修改文档了.

S1/软件技术基础/01-中英文输入

QWERTY键盘,DUORAK键盘,MALT键盘 用键盘选中删除一段文字. (1)将光标移到这段文字的开始点. (2)按住shift键不放,再通过按上.下.左.右方向键,直到到达文字的终点.

操作系统实验指导书(完整版)

操作系统实验指导书 烟台大学计算机学院 操作系统课程组 2008-9-20 第一部分  操作系统上机指导   Linux操作系统环境: RedHat Enterprise Linux ES release 3 (Taroon Update 1) (2.4.21-9.EL) Red Flag Linux release 4.0 (HOT) (2.4)   登录到系统 常用命令练习: 用root账号(超级用户)注册,口令为computer(注意大小写).注册成功出现#号(超级用户系统提示符,普通用户

WLGK-51单片机接口技术基础实验 ——LED闪烁灯

WLGK-51单片机接口技术基础实验-LED闪烁灯 当我们开始接触单片机,首先接触的第一个实验就是LED灯的使用,类似于我们学习软件开始接触的第一个程序"HelloWorld",这个实验是带领我们走入"软硬件综合使用"的一个很好入门示例,51单片机是他的一个载体.下面小伙伴们,让我们一起来揭开LED的神秘面纱吧! 万立高科官网:www.wanligaoke.com 万立高科官方商城:http://www.wlgkbj.com 万立高科淘宝直销店铺:https://r

网络对抗技术—实验一实验报告

学   号:201421450005   中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验一 网络侦查与网络扫描     学生姓名 王潜翔 年级 2014级 区队 网安五区 指导教师 高见     信息技术与网络安全学院 2017年7月7日   实验任务总纲 2017-2018 学年 第 一 学期 一.实验目的 1.加深并消化本课程授课内容,复习所学过的互联网搜索技巧.方法和技术: 2.了解并熟悉常用搜索引擎