中法122班徐彤坤--实验五资料.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构试验五 查找算法实现 姓名:徐彤坤 学号:122930 班级:中法计122班 【实验目的】 熟练掌握顺序查找、折半查找及二叉排序树、平衡二叉树上的查找、插入和删除的方法,比较它们的平均查找长度。 【问题描述】 查找表是数据处理的重要操作, 试建立有100个结点的二叉排序树进行查找,然后用原数据建立AVL树, 并比较两者的平均查找长度。 【基本要求】 以链表作为存储结构,实现二叉排序树的建立、查找和删除。 根据给定的数据建立平衡二叉树。 比较二叉排序树和平衡二叉树的平均查找长度。 【测试数据】 随机生成。 【实现提示】 初始,二叉排序树和平衡二叉树都为空树,操作界面给出查找、插入和删除三种操作供选择。每种操作均要提示输入关键字。每次插入或删除一个结点后,应更新平衡二叉树或二叉排序树的显示。 平衡二叉树或二叉排序树的显示可以采用凹入表形式,也可以采用图形界面画出树形。 【算法思想】 二叉树的定义:二叉排序树或者是一颗空树,或者是一颗具有如下特性的二叉树: 每个结点都有一个作为搜索依据的关键码(key),所有结点的关键码互不相同; 若它的左子树非空,则左子树上所有结点的值均小于根节点的值; 若它的右子树非空,则右子树上所有结点的值均大于根节点的值; 左右子树本身又各是一棵二叉排序树; 【程序主要部分】 1.插入新结点 int InsertAVL(BSTree T,ElemType e,bool taller) { if(!T) { T=(BSTree)malloc(sizeof(BSTnode)); T-data=e; T-lchild=T-rchild=NULL; T-bf=0; taller=true; } void Leftbalance_div(BSTree p,int shorter) p结点的左子树高,删除结点后p的bf减1,树变矮; p结点左、右子树等高,删除结点后p的bf减1,树高不变 p1指向p的右子树,p1结点左、右子树等高,删除结点后p的bf为-2,进行左旋处理,树高不变 p1的右子树高,左旋处理后,树变矮 ElemType DeleteAVL(BSTree p,ElemType key,int shorter) if(LT(key.key,p-data.key) )//在p的左子树中进行删除 if(LQ(key.key,p-data.key) )//在p的右子树中进行删除 【程序源码】 #includeiostream #includestdlib.h #includestring.h #define EQ(a,b) ((a)==(b)) #define LT(a,b) ((a)(b)) #define LQ(a,b) ((a)(b)) using namespace std; typedef int Keytype; typedef struct { Keytype key; //关键字域 }ElemType; typedef struct BSTnode { ElemType data; int bf; struct BSTnode *lchild,*rchild; }BSTnode,*BSTree; void InitBSTree(BSTree T) {T=NULL; } void R_Rotate(BSTree p) {BSTnode *lc; lc=p-lchild; p-lchild=lc-rchild; lc-rchild=p; p=lc; } void L_Rotate(BSTree p) {BSTnode *rc; rc=p-rchild; p-rchild=rc-lchild; rc-lchild=p; p=rc; } void Leftbalance(BSTree T) {BSTnode *lc,*rd; lc=T-lchild; switch(lc-bf) { case +1: T-bf=lc-bf=0; R_Rotate(T); break; case -1: rd=lc-rchild; switch(rd-bf) { case 1: T-bf=-1; lc-bf=0; break; case 0: T-bf=lc-bf=0; break; case -1: T-bf=0; lc-bf=1;

文档评论(0)

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

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

1亿VIP精品文档

相关文档