- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构课程设计
系 别
电子信息系
专 业
计算机科学与技术
班级学号
姓 名
指导教师
成 绩
年 月 日
一、需求分析
程序设计要求对一学生成绩管理程序构造二叉排序树,并在二叉排序树中实现多种方式的查找。基本任务:(1)以回车(\n)为输入结束标志,输入数列L,生成一棵二叉排序树T;(2)对二叉排序树T作中序遍历,输出结果;(3)输入元素x,查找二叉排序树T,若存在含x的结点,则删除该结点,并作中序遍历(执行操作2);否则输出信息“无x”;
若要完成题目的要求,需要解决以下几个问题:
1、选择一种数据结构存储二叉树的信息
2、建立一个新的二叉排序树
在二叉排序树中实现插入、删除、查找相关节点的操作
二、概要设计
1、数据结构的选择:
题目要求选择合适的存储结构构造二叉排序树,我选择链式结构存储。用链表的方式构造节点,存储二叉排序树中的节点。节点类型和指针类型如下:
typedef struct node
{int key;
int other ;
struct node *lchild,*rchild;
}Bstnode;
2、概要设计:
为了完成所需的功能,需要的函数及其功能如下:
main():主函数模块
Bsearch():查找相应的节点
InsertBST ():插入一个新节点
CreateBST ():创建一棵二叉排序树
Inorder ():对二叉排序树进行中序遍历
menu():主函数显示菜单模块
DeleteBST ():删除节点
主函数流程图:
开始
开始
结束
调用menu函数
输入二叉排序树中的元素
输入k=1
k=2
k=4
显示菜单
调用子函数DeleteBST ()
Inorder ()
调用子函数Bsearch()
调用子函数InsertBST ()
Inorder ()
z
N
k=3
图 主函数流程图
子函数流程图:
A.插入子函数InsertBST ()的流程图:
开始
开始
x=p-key
N
Y
p=p-lchild
p=p-rchild
xp-key
Y
N
图 子函数InsertBST ()的流程图
B.子函数Bsearch(p)的流程图
开始
开始
结束
输入需要查找的值
调用查找函数并返回
flag=0
找不到值为%d的节点
已找到该节点
Y
N
图 子函数Bsearch(p)的流程图
三、详细设计
二叉排序树的基本操作
二叉排序树的查找算法
若二叉排序树为空,则查找失败。
否则,将根结点的关键字与待查关键字进行比较,若相等,则查找成功;若根节点关键字大于待查值,则进入左子树重复次步骤,否则,进入右子树进行此步骤;若在查找过程中遇到二叉排序树的叶子节点时,还没有找到待查节点,则查找不成功。
算法如下:
Bstnode *Bsearch(Bstnode *t,int x)//查找
{Bstnode *p;
int flag=0;p=t;
while(p!=NULL)
{ if(p-key==x)
{ printf(已找到该节点!);flag=1;return(p);break;}
if (xp-key)
p=p-lchild;
else p=p-rchild;
}
if(flag==0)
{printf(找不到值为%d的节点!,x); return NULL; }
}
二叉排序树的节点插入算法
在二叉排序树中插入一个新节点,首先要查找该节点在二叉排序树中是否已经存在。若二叉排序树中不存在关键字等于x的节点,则插入。
将一个关键字值为x的节点s插入到二叉排序树中,可以用下面的方法:
若二叉排序树为空,则关键字为x的节点s成为二叉排序树的根‘
若二叉排序树非空,则将x与二叉排序树根进行比较,如果x的值等于根节点关键值,则停止插入;如果x的根节点值小于根节点关键值,则将x插入左子树;如果x的值大于根节点关键字的值,则将x插入右子树。在左右两个子树的插入方法与整个二叉排序树相同。
算法如下:
Bstnode *InsertBST(Bstnode *t,int x)//插入
{Bstnode *s,*p,*f;p=t;
while (p!=NULL){
f=p; //查找过程中,f指向*p的父节点
if(x==p-key) return t; //二叉排序树中已有关键字为x的元素,无序插入
if(xp-key) p=p-lchild;
else p=p-rchild;
}
s=(Bstnode
原创力文档


文档评论(0)