- 9
- 0
- 约7.97千字
- 约 8页
- 2018-10-16 发布于湖北
- 举报
二叉排序树的基本操作njzch8wt
《数据结构》课程设计
专 业:XXX
班 级:XXX
学 号:XXX
姓 名:XXX
日期: 年 月 日
需求分析
动态查找表在查找过程中可改变表的状态,即可插入或删除数据,它适合用在表的内容要经常变化的情况下,如飞机航班的旅客信息表。
概要设计
主界面设计
为了实现对二叉排序树各功能的管理,设计一个多菜单的菜单,方便用户使用本系统。本系统主控菜单运行界面如下图所示。
存储结构设计
本系统选取二叉链表作为二叉排序树的存储结构
系统功能设计
本系统设置了5个资功能的设计,如下:
建立二叉排序树
可以一次输入多个数据,建立二叉排序树。但是只能建立一次,一旦选择输入后就会被锁定,不能再次输入。通过CreateBST(BiTree T)函数实现。
查找需求的数据
输入一个数据进行查找,用SearchBST (BiTree T, KeyType key)函数来实现
插入一个数据
根据给定的数据进行查找,若没有,则插入,用InsertBST(BiTree T, TElemType e)函数来实现
删除数据
选择一个数据进行删除操作DeleteBST(BiTree T, KeyType key)
遍历输出二叉排序树
通过三种顺序进行遍历,可以选择先,中,后序的方式,PreOrderTraverse(BiTree T),InOrderTraverse(BiTree T), PostOrderTraverse(BiTree T)
详细设计
数据类型定义
本系统采用链式结构存储信息。结点定义如下:
typedef struct{
KeyType key;
}TElemType;
系统主要子函数详细设计
建立二叉排序树:
Status CreateBST(BiTree T){
int k;
TElemType a[10];
cout请输入要输入的个数:endl;
cink;
cout请依次输入这些数,回车结束:endl;
for(int i=0;ik;i++){
cina[i].key;
}
InitDSTable(T);
for(int m=0;mk;m++){
InsertBST(T, a[m]);
}
return TRUE;
}
遍历输出:
void Visit(TElemType a){
cout a.key;
}
void PreOrderTraverse(BiTree T)
{
if (T) {
Visit(T-data);
PreOrderTraverse(T-lchild);
PreOrderTraverse(T-rchild);
}
}
void InOrderTraverse(BiTree T)
{
if (T) {
InOrderTraverse(T-lchild);
Visit(T-data);
InOrderTraverse(T-rchild);
}
}
void PostOrderTraverse(BiTree T)
{
if (T) {
PostOrderTraverse(T-lchild);
PostOrderTraverse(T-rchild);
Visit(T-data);
}
}
测试分析
在建立二叉排序树上,应该输入一次,这样才能有序有效,故,采用一开即闭的操作
输入时,应该先给出循环次数,这样便于操作
进行2至5的操作时,必须先建立二叉排序树
使用说明
本程序执行文件为“test.exe”。
进入本系统之后,随即显示系统主菜单。用户可以键入对应功能的数字选项,执行对应的功能
本程序没有直接修改的功能,可以通过查找,删除,插入完成此功能
根据提示进行各项操作
测试结果
在主菜单下,用户输入1并回车,然后按照提示建立二叉排序树,运行结果如下图:
在主菜单下,用户输入2并回车,然后按照提示查询数据,运行结果如下图:
在主菜单下,用户输入3并回车,然后按照提示插入数据,运行结果如下图:
在主菜单下,用户输入4并回车,然后按照提示删除数据,运行结果如下图:
在主菜单下,用户输入5并回车,然后按照提示遍历输出,运行结果如下图:
在主菜单下,用户输入0并回车,然后按照提示进行退出,运行结果如下图:
代码:
#includeiostream
#includestdlib.h
using namespace std;
#define FALSE 0
#define TRUE 1
#define NU
原创力文档

文档评论(0)