数据结构二叉排序树课程设计报告
更新时间:2023-12-26 07:20:01 阅读量: 教育文库 文档下载
东华理工大学理学院
课 程 设 计 报 告
——数据结构
题目:二叉排序树
姓 名: 学 号: 专 业: 班 级: 指导老师:
年数据结构课程设计
月 日
1
东华理工大学理学院
目 录
一、课程设计简介 ............................................................................ 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
数据结构课程设计
2
东华理工大学理学院
一、课程设计简介
1.1、题目:二叉排序树相关操作
1、创建二叉排序树;2、插入给定值; 3、查找给定值; 4、删除给定值的结点。
1.2、报告要求:
1、封面; 2、题目与流程图或模块图; 3、程序清单和运行结果; 4、小结(收获和体会); 5、装订成册。
1.3、目的:
课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。
二、原理分析及流程 2.1、原理分析:
根据题目要求,要实现这些功能,就必须创建一个菜单。这个菜单设置在main()函数里面,然后使用while()...switch()语句进行循环调用相关函数,以达到实现
数据结构课程设计
3
东华理工大学理学院
相关功能的目的。
2.2、流程图:
1、main()函数:
main()开始 选择操作 选择 1 选择2 选择3 选择4 选择5 创建 插入 查找 删除 退出 2、创建:
Create(&t)
输入结点值,以 -1结束
调用插入函数 数据结构课程设计 4
东华理工大学理学院
3、插入: Insert(&t,x) 输入给定的结点值 N *t==null Y *t=s x<(*t)->key N Y 结束 insert(&((*insert(&((*t)->lchild)t)->rchild)
数据结构课程设计
5
东华理工大学理学院
4、查找: search(t,x) 输入给定的结点值x,p=t Y P!=null N 返回null x=p->key x
6
东华理工大学理学院
5、中序遍历输出:
display(t) t!=null display(t->lchild) 访问并输出根节点 display(t->rchild) 数据结构课程设计
7
东华理工大学理学院
三、算法描述
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插入右子树。在左右两个子树的插入方法与
数据结构课程设计
8
东华理工大学理学院
整个二叉排序树相同。 算法如下:
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) {
数据结构课程设计
9
东华理工大学理学院
if (x==p->key) return p->key;
else if(x
{ printf(\ } }
3.4、删除算法
在二叉排序树中删除节点,首先要确定被删除的节点是否在二叉排序树中。
若不在,则不做任何操作;否则,假设要删除的节点为p,节点p的父节点为r,并假设p是r的左孩子。根据被删除节点p有无孩子,删除部分可做以下3中情况讨论:
(1)若p为叶子节点,则可令其父节点r的左孩子指针域为空,直接将其删除。
(2)若p节点只有右子树或左子树,则可以将p的左子树或右子树直接改为其双亲节点r的左子树。
(3)若p既有左子树又有右子树;将节点s为p的中序前驱。首先找到p的中序前驱节点s,然后用节点s的值代替节点p的值,再将节点s删除,节点s的原左子树改为s的双亲节点q的右子树。 算法如下:
bstree delete(bstree t,keytype x) {
bstree p,q,r,s; p=t;
数据结构课程设计
10
东华理工大学理学院
r=null; while(p) {
if(x==p->key) break; r=p;
if(x
if(p==null) {printf(\ if((p->lchild==null)||(p->rchild==null)) {
if(r==null)
if(p->lchild==null) t=p->rchild; else t=p->lchild;
else if(p->lchild==null) if(r->lchild==p) r->lchild=p->rchild; else r->rchild=p->rchild; else if(r->lchild==p) r->lchild=p->lchild; else r->lchild=p->lchild; free(p); } else { q=p;
s->lchild;
while(s->rchild)
{q=s;s->rchild;}
if(q==p) q->lchild=s->lchild; else p->key=s->key; free(s); } return t; }
四、小结与体会
数据结构课程设计
11
东华理工大学理学院
经过一个多星期来夜以继日的努力,终于把课程设计——二叉排序树的相关算法全部完成!在编写程序过程中,让我对二叉排序树的创建、插入、查找、删除算法有了较系统的认识,也发现了一些以前纸上谈兵时的思想误区。比如实现插入功能时,从根节点开始比较;当实现删除功能时,如果待删除结点p左、右子树齐全,首先找到p的中序前驱节点s(p的中序前驱),然后用节点s的值代替节点p的值,再将节点s删除,节点s的原左子树改为s的双亲节点q的右子树。实现中序遍历功能时,采用递归思想......
这是第一次关于编写程序的课程设计。虽然上机安排只有两天时间,可却并不像平时上机实验一样,离开了机房就不用再对着电脑屏幕编写代码,更多的工作实在离开机房后完成的。一遍一遍地按F9调试程序,error从几十个减少到几个,再到只剩几个warring,当按下Ctrl+F9,那精心设计的“菜单”出现在屏幕上时,那一刻的心情无以言表!涌上心头的除了自豪感、成就感之外,还有对编程工作之辛苦的慨叹!因为自己专业将来的方向与这有关,不免让我考虑起毕业后的发展方向。如果朝这方面发展的话,我是否可以胜任这样的工作?如果不是,又该选择什么?
五、程序执行过程
5.1、创建二叉排序树并中序输出
数据结构课程设计
12
东华理工大学理学院
5.2插入并中序输出
5.3、查找
数据结构课程设计
13
东华理工大学理学院
5.4、删除并中序输出
六、程序清单
#include
typedef int keytype; typedef struct node {
keytype key;
struct node *lchild,*rchild; }bstnode,*bstree;
void insert(bstree *t,keytype x); bstree search(bstree t,keytype x);
数据结构课程设计
14
东华理工大学理学院
void display(bstree t); void create(bstree *t) {
keytype x; *t=null;
scanf(\ while(x!=-1) {
insert(t,x);
scanf(\ } }
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); }
bstree search(bstree t,keytype x) {
bstree p; p=t;
if(p!=null) {
if (x==p->key) return p->key;
else if(x
{ printf(\ return null; } }
bstree delete(bstree t,keytype x)
数据结构课程设计
15
东华理工大学理学院
{
bstree p,q,r,s; p=t; r=null; while(p) {
if(x==p->key) break; r=p;
if(x
if(p==null) {printf(\ if((p->lchild==null)||(p->rchild==null)) {
if(r==null)
if(p->lchild==null) t=p->rchild; else
t=p->lchild;
else if(p->lchild==null) if(r->lchild==p) r->lchild=p->rchild; else r->rchild=p->rchild; else if(r->lchild==p) r->lchild=p->lchild; else r->lchild=p->lchild; free(p); } else { q=p;
s->lchild;
while(s->rchild)
{q=s;s->rchild;} if(q==p)
q->lchild=s->lchild; else
p->key=s->key; free(s); } return t; }
数据结构课程设计
16
东华理工大学理学院
void display(bstree t) {
if(t!=null) {
display(t->lchild); printf(\ display(t->rchild); } }
void main(void) {
bstree t,b; int i=1,j; keytype x; while(i) {
printf(\
printf(\ MENU OF BSTREE *\\n\ printf(\ 1.create 2.insert *\\n\ printf(\ 3.search 4.delete *\\n\ printf(\ 5.exit *\\n\ printf(\
printf(\ switch(j) {
case 1: printf(\ printf(\
case 2: printf(\ insert(&t,x);display(t);break;
case 3: printf(\ printf(\
case 4: printf(\ delete(t,x);display(t);break;
case 5: i=0;break; } }
clrscr(); }
数据结构课程设计
17
正在阅读:
数据结构二叉排序树课程设计报告12-26
5-城镇迁建规划设计规范04-13
七年级语文(下册)(苏教版)最新周周练参03-08
22、在沙漠中心 教学资料03-08
2018届黑龙江省齐齐哈尔市高三第三次模拟考试理科综合生物试题(解析版)12-07
微生物学复习题和参考答案06-17
第九讲 百分数应用题专题讲义06-04
人教版八级数学下册第二学期 同步课堂补习辅导练习题作业 第十九章 一次函数周周测9(全章)09-28
一年级校本课程内容 - 图文09-19
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 数据结构
- 排序
- 课程
- 报告
- 设计