ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:43.11KB ,
资源ID:1283886      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/1283886.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于BST二叉排序树的城市信息管理内容清晰.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于BST二叉排序树的城市信息管理内容清晰.docx

1、基于BST二叉排序树的城市信息管理内容清晰一、 设计题目【问题描述】利用二叉排序树实现城市信息管理,城市信息包括城市名、城市坐标(X,Y)。【基本要求】将若干城市信息按城市名的顺序建立二叉排序树;可以插入一个城市信息;按城市名查找一个城市信息;输入一个城市名,查找和该城市名的距离在指定范围内的所有城市。【测试数据】自己指定。【选作内容】 删除一个城市信息。二、需求分析1)运行环境(软、硬件环境)Microsoft visual c+6.0PC+window 72)输入的形式和输入值的范围输入城市信息,例如:“城市名 左坐标 右坐标”的形式。输入的左右坐标是整型的,城市名是字符串(以中文的形式)

2、。左右坐标为100内的整数。3)输出的形式描述输出的是城市信息,就是例如:“城市名 左坐标 右坐标”的形式。4)功能描述 输入参数包括:城市名,左坐标,右坐标;需要插入的城市与左右坐标;需要查找的城市名;需要查找周围城市信息的城市名与搜索范围;需要删除的城市名。功能要求:1.将若干城市信息按城市名的顺序建立二叉排序树;2.可以插入一个城市信息;3.按城市名查找一个城市信息;4.输入一个城市名,查找和该城市名的距离在指定范围内的所有城市。5.删除一个城市信息(选作)。5)测试数据输入的城市信息:兰州(5,6)成都(3,4)西安(4,9)上海(2,8)北京(1,3)需要插入的城市:银川(3,5)需

3、要查找的城市:兰州需要查找哪个城市周围城市:西宁查找范围:20需要删除的城市名:新疆(选做)三、概要设计1)抽象数据类型定义描述(对各类的成员及成员函数进行抽象描述,参见书或ppt及实验) 本设计采用非线性结构中的树结构的二叉排序树思想,定义了如下的各类的成员及成员函数:类: information(包含城市的所有信息) 其中cityname作为其成员。并在类内定义了一个结构体,x,y为其成员,并定义了结构体的对象cityname_location,用来后期调用坐标变量x,y。类:BiNode (二叉排序树的结点结构) 将后面的BiTree作为其友元类。 其中定义了之前information类

4、的对象data作为自己的成员,并定义了指向左孩子的指针和指向右孩子的指针。类:BiTree (二叉排序树的类) 定义了带参构造函数。 获取指向根结点的指针的成员函数(函数成员名Getroot); 用于起始插入值的成员函数(函数成员名InsertBST); 用于后期插入值的成员函数(函数成员名InsertBST1); 用于删除一个或者多个结点的成员函数(函数成员名deleteBST)和其后面需要用到的两个函数(函数名:searchMinRchild,searchParent);(选做) 用于查找城市信息的成员函数(成员函数名SearchBST); 用于前序遍历二叉树的成员函数(成员函数名Preo

5、rder); 用于中序遍历二叉树的成员函数(成员函数名Inorder); 用于选择界面的成员函数(成员函数名Choose); 用于对起始城市坐标赋值的成员函数(成员函数名Begain); 用于查找需要被动比较的城市的坐标的成员函数(成员函数名Find); 用于查找作为参照的城市坐标的成员函数(成员函数名Find1)还定义了二叉排序树(即二叉链表)的根指针(root)2)功能模块设计(如主程序模块设计)1、起始: 输入要输的城市的个数(数字,中文,英文都可以,大小写皆可)。 调用插入函数InsertBST,根据城市的名字(利用其ascii码值)进行二叉排序树的创建。 调用Begain函数,对起始

6、城市坐标赋值 完成所有城市的所有信息输入完成,待用。2、主菜单模块: 调用Choose函数,进行主菜单显示,并用switch与case进行菜单内容的选择实现。做到每次信息更新后都能及时显示在屏幕上供用户查看。3、前序遍历城市信息表模块: 调用前序遍历二叉树的成员函数(成员函数名Preorder),对已创建的二叉排序树进行前序遍历输出。4、中序遍历城市信息表模块: 调用中序遍历二叉树的成员函数(成员函数名Inorder),对已创建的二叉排序树进行中序遍历输出。5、查询城市信息模块: 输入查询的总次数,用for循环实现多次的查找; 输入要查询的城市; 调用函数SearchBST进行查找。 结果显示

7、。6、查找制定距离内的城市信息模块: 输入指定的城市; 输入指定的距离; 用for循环实现对所有已有的城市信息的查找。 调用函数Find查找需要被动比较的城市的坐标; 调用函数Find1查找作为参照的城市坐标。 对相应的城市坐标进行算术运算,相减平方开放 (即:sqrt(x-z)*(x-z)+(y-w)*(y-w)) 最终判定结果显示。7、插入模块: 输入插入的总次数,用for循环实现多次的插入; 输入要插入的城市(新申请一个结点,用输入的城市名赋值于结点的data.city); 由于新加了一个结点,所以总个数n要相应改变,每插入一个加一,并将信息放入对应的数组单元。 将新结点的指向左右孩子的

8、指针赋值为空。 调用函数InsertBST进行插入,将其接入适合的二叉排序树的位置根据(左小右大)。 结果显示。8、删除模块:(选做) 输入删除的总次数,用for循环实现多次的删除; 输入要删除的城市; 先调用函数SearchBST对输入值进行查找,如果找到则,有效删除,否则显示不存在给的城市名。 结果显示。9、退出模块: 显示本人信息,对使用表示感谢,然后用exit(0)直接退出程序。 3)模块层次调用关系图 各模块之间的关系图:四、详细设计实现概要设计中定义的所有的类的定义及类中成员函数,并对主要的模块写出伪码算法。1.二叉排序树的定义二叉排序树(Binary Sort Tree)又称二叉

9、查找(搜索)树(Binary Search Tree)。其定义为:二叉排序树或者是空树,或者是满足如下性质的二叉树:若它的左子树非空,则左子树上所有结点的值均小于根结点的值;若它的右子树非空,则右子树上所有结点的值均大于根结点的值;左、右子树本身又各是一棵二叉排序树。上述性质简称二叉排序树性质(BST性质),故二叉排序树实际上是满足BST性质的二叉树。templateclass BiTree public: BiTree(T a,int n);/带参构造函数 BiNode*Getroot()return root;/获取指向根结点的指针 BiNode*InsertBST(BiNode*root

10、,BiNode*s); /在二叉排序树中插入一个结点s,此处用于起始值插入 BiNode*InsertBST1(BiNode*root,BiNode*s); /2在二叉排序树中插入一个结点s,用于后期功能的多个或一个插入 /值,会显示插入成功 BiNode*SearchBST(BiNode*root,T k);/查找值为k的结点 void Preorder(BiNode*rt);/前序遍历二叉树 void Inorder(BiNode*rt); /中序遍历二叉树 void Choose();/选择界面 BiNode*Begain(BiNode*root,BiNode*s);/对城市X,Y坐标进

11、行初始化 BiNode*Find(BiNode*root,T k);/用于查找需要被比较的城市的坐标 BiNode*Find1(BiNode*root,T k);/查找作为参照的城市坐标 private: BiNode*root;/二叉排序树的根指针;2.二叉排序树的性质 按中序遍历二叉排序树,所得到的中序遍历序列是一个递增有序序列。3.二叉排序树的插入 在二叉排序树中插入新结点,要保证插入后的二叉树仍符合二叉排序树的定义。此处我将插入模块分成了两个部分。第一个用来将刚开始的数据建立最初的二叉排序树BiNode* BiTree:InsertBST(BiNode *root, BiNode *s

12、)情况1、先判断if(root=NULL)即如果原结点不存在,则,插入结点变成根结点return s;情况2、如果有结点存在,则进行判断,二叉排序树特点,根结点关键字大于其左子树,小于其右子树1) 插入结点小于根结点。即:if(s-data.citydata.city)/root-lchild = InsertBST(root-lchild, s); /插入左子树,再依次往下比较。 2)插入结点大于根结点。root-rchild = InsertBST(root-rchild, s); 插入到右子树中,再依次比较,最终确定位置插入过程:templateBiNode*BiTree:InsertB

13、ST(BiNode*root,BiNode*s)/在二叉排序树中插入一个结点s,此处用于起始插入值 if(root=NULL) /如果原结点不存在,则插入结点变成根结点 return s; else/如果有结点存在,则进行判断,二叉排序树特点,根结点大于其左子树,小于其右子树 if(s-data.citydata.city)/插入结点小于根结点(按关键字城市名进行判断) root-lchild=InsertBST(root-lchild,s);/插入到左子树中 else /插入结点大于根结点(按关键字城市名进行判断) root-rchild=InsertBST(root-rchild,s);

14、/插入到右子树中 return root; templateBiNode*BiTree:InsertBST1(BiNode*root,BiNode*s)/1在二叉排序树中插入一个结点s,用于后期功能的多个或一个插入值,会显示插入成功 if(root=NULL) /如果原结点不存在,则,插入结点变成根结点 return s; else if(s-data.citydata.city) root-lchild=InsertBST(root-lchild,s); else root-rchild=InsertBST(root-rchild,s); cout endl; Begain(root,s); return root;4.二叉排序树的查找 假定二叉排序树的根结点指针为 root ,给定的关键字值为 K ,则查找算法可描述为:templateBiNode*BiTree:Find(BiNode*root,T k) /得到被比较结点的x,y坐标,

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1