数据结构课设
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告排序二叉树
完成日期:2015/01/03
目录
一、需求分析
1.运行环境;
2.程序所实现的功能;
3.程序的输入:
4.程序的输出:
5.测试数据,
6.合作人及其分工
二、设计说明
1.算法设计的思想;
2.主要的数据结构设计说明;
3.程序的主要流程图;
4.程序的主要模块,;
5.程序的主要函数及其伪代码说明.
6.合作人设计分工。
三、上机结果及体会
1.合作人编码分工;
2.实际完成的情况说明;
3.程序的性能分析;
4.打印程序运行时的初值和运行结果,画出相应的图示;
5.上机过程中出现的问题及其解决方案;
6.程序中可以改进的地方说明;
7.收获及体会;
8.源程序清单并附上注释。
四、参考文献
一、需求分析
1.运行环境
a软件环境
操作系统:windows 7 编译器 microsoft visual studio 2010
b硬件环境
联想 n480
2.程序所实现的功能
1.创建二叉树:
(1)按提示信息输入一组关键字值,并建立相应的二叉排序树。
(2)按照先序遍历方式显示建立的二叉排序树。
(3)按照中序遍历方式显示建立的二叉排序树。
(4)按照后序遍历方式显示建立的二叉排序树。
2.显示二叉排序树:
(1)按照先序遍历方式显示二叉排序树。
(2)按照中序遍历方式显示二叉排序树。
(3)按照后序遍历方式显示二叉排序树。
(4)按照层次遍历方式显示二叉排序树。
3.删除一个结点:
要求可以实现删除根结点、叶子结点以及其它任意结点的功能。
(1)按照先序、中序、后序方式显示删除前的二叉排序树。
(2)按提示信息输入被删除结点的值,并在二叉排序树进行删除。
(3)显示删除是否成功的结果。
(4)若删除成功,则按照先序、中序、后序方式显示删除后的二叉排序树。
4.插入一个结点:
(1)按照先序、中序、后序方式显示插入前的二叉排序树。
(2)按提示信息输入要插入结点的值,并在二叉排序树进行插入。
(3)显示插入是否成功的结果。
(4)若插入成功,则按照先序、中序、后序方式显示插入后的二叉排序树。
5.查找给定值的结点:
(1)按照先序、中序、后序方式显示二叉排序树。
(2)按提示信息输入待查找的值,并在二叉排序树进行查找。
(3)显示查找是否成功的结果。
6.交换二叉排序树:
(1)按照先序、中序、后序方式显示初始的二叉排序树。
(2)按照先序、中序、后序方式显示交换左右子树后的二叉排序树。
7.退出:退出整个算法演示程序。
3.程序的输入:
输入为整形数据,输入一串数字序列并以-1结束,且以回车键相隔。
4.程序的输出:
通过用户手动选择操作指令,经由程序内部处理,输出相应的结果到显示屏。
5.测试数据,
用户手动输入一个数字序列进行数据测试
二、设计说明
1算法设计的思想
根据算法的需求,确定算法的主要模块(建立二叉树、显示二叉树,插入结点、删除结点、查找结点、退出系统。以及主函数模块)对各模块再进行函数的选取与构造,以及变量的控制等。最后,再将各模块结合,形成完整的算法,由主函数来调用。并设计界面。程序运行时在界面上显示及选择。注意全局变量的选择。
2主要的数据结构设计说明;
设计了一个排序二叉树的数据结构,包括查找,删除等功能。首先使用类模板建立排序二叉树类,及结点类存储结构。因显示函数中的层次遍历需要用到队列,所以定义了一个链式队列类,二叉树函数成员中包括查找,删除,显示,插入函数。下面分别写出几个函数的代码。主函数部分包括一个主函数和一个界面模块。主函数调用部分1.建立二叉树即循环调用插入函数。并调用遍历函数,2.遍历显示,调用遍历函数。3.删除,首先由查找函数查找到关键字的地址,再传递给删除函数,进行删除。4.插入,插入前,插入后分别调用遍历函数并且调用插入函数即可,插入函数中,调用了查找函数。5.
查找,调用查找函数,并显示查找结果,成功或者失败。6.退出系统,整个主函数循环选择功能序号的条件是number不等于6。7.交换功能
3.程序的主要流程图;
显示删除查找交换插入主函数
建树函数定义内部
是否查找成功删除失败
是否查找
到是插入失败先中后序遍历先中后序遍历先中后序遍历
先中后序遍历
是否找到否
a.创建二叉树:
循环条件调用插入函数。 b.显示二叉排序树:
调用desplayTree 函数,desplayTree 函数调用先中后序遍历。调用层次遍历函数。 c.删除一个结点:
首先由查找函数查找到关键字的地址,再传递给删除函数,进行删除。并在删除前后显示遍
d.插入一个结点:
插入前,插入后分别调用遍历函数并且调用插入函数即可,插入函数中,调用了查找函数。
e.查找给定值的结点:
查找,调用查找函数,并显示查找结果,成功或者失败。
f.交换二叉排序树:
g.退出:
5.程序的主要函数及其伪代码说明
a.删除函数
P定义为叶结点p->leftChild == NULL&&p->rightChild == NULL
如果p的左孩子右孩子均为空delete p;直接删除p
else if (p->leftChild == NULL)
tmpPtr=p;
p=p->rightChild;
delete tmpPtr;
如果被删除的元素只有右子树,没有左子树,则可以拿他的左孩子顶替他的位置,再释放该元素的存储空间即可;只有左子树没有右子树同理。
tmpF=p;
tmpPtr=p->leftChild;
while (tmPtr->rightChild != NULL){
//查找p在中序序列中直接前驱tmpPtr及其双亲tmpF
tmpF=tmpPtr;
tmpPtr=tmpPtr->rightChild;
}
p->data=tmpPtr->data;
//将tmpPtr指向结点的数据元素值赋值给被删除的结点
if (tmpF->rightChild == tmpPtr) //删除tmpPtr的结点
Delete(tmpF->rightChild);
else
Delete(tmpF->rightChild);
else
Delete(tmpF->leftChild);
如果被删除的元素左右孩子都存在的话,则在他的左子树中寻找关键字值最大的数据元素x,用x的值代替被删除元素的值,再来删除数据元素的值x。
b.交换函数
(head->leftChild==NULL&&head->rightChild==NULL)如果左右孩子均为空,则不需要交换。temp=head->leftChild;
head->leftChild=head->rightChild;
head->rightChild=temp;
如果不为空,则定义中间变量,进行左右交换。
if(head->leftChild)
ExchangeTree(head->leftChild);
如果被交换的结点存在树的左子树上则递归递归调用交换函数。存在于右子树上同理。