数据结构二叉排序树课程设计报告
- 格式:doc
- 大小:137.00 KB
- 文档页数:17
课 程 设 计 报 告
——数据结构
题目:二叉排序树
姓 名:
学 号:
专 业:
班 级:
指导老师:
年 月 日 目 录
一、课程设计简介 ............................................................................ 3
二、原理分析及流程 ........................................................................ 3
2.1、原理分析............................................................................3
2.2、流程图................................................................................4
1、main()函数....................................................................4
2、创建...............................................................................4
3、插入...............................................................................5
4、查找...............................................................................6
5、中序遍历输出 .............................................................. 7
三、算法描述 .................................................................................... 8
3.1、存储结构 ........................................................................... 8
3.2、插入算法 ........................................................................... 8
3.3、查找算法 ........................................................................... 9
3.4、删除算法 ......................................................................... 10
四、小结与体会 .............................................................................. 12
五、程序执行过程 .......................................................................... 13
5.1、创建二叉排序树并中序输出.........................................13 5.2、插入并中序输出..............................................................13
5.3、查找..................................................................................14
六、程序清单 .................................................................................. 14
一、课程设计简介
1.1、题目:二叉排序树相关操作
1、创建二叉排序树;2、插入给定值;
3、查找给定值; 4、删除给定值的结点。
1.2、报告要求:
1、封面; 2、题目与流程图或模块图;
3、程序清单和运行结果; 4、小结(收获和体会);
5、装订成册。
1.3、目的:
课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。
二、原理分析及流程
2.1、原理分析:
根据题目要求,要实现这些功能,就必须创建一个菜单。这个菜单设置在main()函数里面,然后使用while()...switch()语句进行循环调用相关函数,以达到实现相关功能的目的。
2.2、流程图:
1、main()函数:
2、创建:
3、插入: 选择操作 main()开始
选择1
创建 选择2
插入 选择3
查找 选择4
删除 选择5
退出
Create(&t)
输入结点值,以-1结束
调用插入函数
N
Y
N
Y
4、查找: Insert(&t,x)
输入给定的结点值
*t==null
x<(*t)->key
insert(&((*t)->lchild)insert(&((*t)->rchild)*t=s
结束
Y
N
Y N
5、中序遍历输出:
返回search(p->rchild,x) 输入给定的结点值x,p=t
P!=null
xkey
返回search(p->lchild,x) 返回null search(t,x)
返回p->key x=p->key
display(t)
三、算法描述
3.1、存储结构
定义一个链表式的二叉排序树,用链表的方式构造结点,存储二叉排序树中的结点、结点类型和指针类型如下:
#include #define null 0
typedef int keytype;
typedef struct node
{
keytype key;
struct node *lchild,*rchild;
}bstnode,*bstree;
3.2、插入算法
在二叉排序树中插入一个新节点,首先要查找该节点在二叉排序树中是否已经存在。若二叉排序树中不存在关键字等于x的节点,则插入。
将一个关键字值为x的节点s插入到二叉排序树中,可以用下面的方法:
(1)若二叉排序树为空,则关键字为x的节点s成为二叉排序树的根
(2)若二叉排序树非空,则将x与二叉排序树根进行比较,如果x的值等于根节点关键值,则停止插入;如果x的根节点值小于根节点关键值,则将x插入左子树;如果x的值大于根节点关键字的值,则将x插入右子树。在左右两个子树的插入方法与整个二叉排序树相同。
算法如下:
void insert(bstree *t,keytype x)
{
bstree s;
if(*t==null)
{
s=(bstree)malloc(sizeof(bstnode));
s->key=x;
s->lchild=null; s->rchild=null;
*t=s;
}
else if(x<(*t)->key)
insert(&((*t)->lchild),x);
else if(x>(*t)->key)
insert(&((*t)->rchild),x);
}
3.3、查找算法
(1)若二叉排序树不为空,将根结点的关键字与待查关键字进行比较,若相等,则查找成功;若根节点关键字大于待查值,则进入左子树重复次步骤,否则,进入右子树进行此步骤;若在查找过程中遇到二叉排序树的叶子节点时,还没有找到待查节点,则查找不成功。
(2)否则,查找失败,返回null。
算法如下:
bstree search(bstree t,keytype x)
{
bstree p;
p=t;
if(p!=null)
{
if (x==p->key) return p->key;
else if(xkey) return search(p->lchild,x);
else return search(p->rchild,x);
}
else
{ printf("%d can not be found\n",x);return null;
}
}