BST实验报告.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
BST实验报告

问题描述 利用二叉查找树(BST)实现一个动态查找表 基本要求 使用二叉树(BST)来实现。 二叉树使用链式结构(二叉链表)实现。 实现BST的构建,查找两个功能。 一 需求分析 1.输入的形式:输入要存储元素的个数n(正整数),n个元素的值(设为整数)和要查找元素的值; 2.输出的形式:输出是否找到(查找成功\不成功)和查找时比较的次数(正整数); 3.程序所能达到的功能:要求输入用户设定个元素,再输入要查找的元素,输出是否找到和查找时比较的次数; 4、测试数据 输入: 5//BST的节点数 请输入数据:43 54 32 12 57 //五个数据 请输入查找数:54 //查找54 输出:查找成功 2 //返回成功和查找时比较的次数 请输入查找数:12 //查找12 输出:查找成功 3 //返回成功和查找时比较的次数 请输入查找的数: 50 //查找50 输出:查找不成功 3 //返回成功和查找时比较的次数 二 概要设计 抽象数据类型的定义 BST,二叉查找树,先定义一个二叉树节点,然后实现二叉查找树的功能。 数据对象:整数 数据关系:数据元素属于同一集合,是二叉树,如果对其做中序遍历呈递增序列 基本操作:遍历,二叉树的构建,查找,插入 算法的基本思想 将输入的BST的元素用插入的方法存进BST中(由于BST中任何结点的左孩子小于该节点,右孩子大于该节点,所以用递归方法比较插入)。判断输入要查找的元素是否在BST中(递归比较要查找的元素与当前元素的值的大小,若小于当前值,则查找其左子树;若大于,则查找其右子树),若在,则输出位置;若不在,则插入到BST中,并输出其位置 程序的流程: 程序由三个模块组成: (1)输入模块:输入二叉查找树的元素个数、元素的值,以及要查找的数 (2)查找模块:判断该元素是否在二叉查找树中,若未找到,则插入到二叉查找树中。 (3)输出模块:输出是否找到。若找到,则输出位置;若未找到,则输出插入的位置。 三 详细设计 (1)物理数据类型 因为要实现一个动态查找表,对一个数进行查找,用线性表实现所用的时间代价比较高,而用二叉查找表来实现的话时间代价显剧较低,故可以构建一个二叉查找树,来实现动态查找。 (2)算法的具体步骤 BST的构建伪代码为: 初始化BST,调用插入函数,用for循环使得输入的元素一个一个以插入的形式存入BST中 BSTree InitBST(int n) { //输入一个结点序列,建立一棵二叉排序树,将根结点指针返回 BSTree T=NULL; //初始时T为空树 int key; for(int i=0;in;i++) { cinkey;//读入一个关键字 InsertBST(T,key); //将key插入二叉排序树T }//存入n个元素到BST中 return T; //返回建立的二叉排序树的根指针 } //BSTree 2、BST的查找设计和伪代码为: 若BST为空或者要查找的元素就是BST当前的元素值key,返回该树,即若T为空,查找失败;否则成功,返回找到的结点位置; 若输入的查找元素小于BST当前的元素值,则以递归的形式在左子树中继续查找; 若输入的查找元素大于BST当前的元素值,则以递归的形式在右子树中继续查找。 BSTNode *SearchBST(BSTree T,int key) { //在二叉排序树T上查找关键字为key的结点,成功时返回该结点位置,否则返回NULL if(T==NULL||key==T-key) //递归的终结条件 { return T; //T为空,查找失败;否则成功,返回找到的结点位置 } if(keyT-key) return SearchBST(T-lchild,key);//在左子树中查找 else return SearchBST(T-rchild,key);//继续在右子树中查找 } //SearchBST 3、BST的插入伪代码: 定义BST临时指针p和temp;P指向T,构建temp,使得其根节点值为要查找的元素,左右孩子为空。 若要查找的BST为空,则插入元素为根节点; 若要插入的元素小于当前元素,则被插结点为左孩子,返回TRUE; 若要插入的元素大于当前元素,则被插结点为右孩子,返回TRUE。 Status insertBST(BSTree T, int e) { BSTree *p = NULL, *temp = NULL; temp = (B STree *)malloc(sizeof(BSTree));

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档