数据结构课设

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

如果被交换的结点存在树的左子树上则递归递归调用交换函数。存在于右子树上同理。

相关文档
最新文档