设计出树结构的相关函数库以便在程序设计中调用可编辑doc文档格式.docx

上传人:b****3 文档编号:17566689 上传时间:2022-12-07 格式:DOCX 页数:10 大小:19.52KB
下载 相关 举报
设计出树结构的相关函数库以便在程序设计中调用可编辑doc文档格式.docx_第1页
第1页 / 共10页
设计出树结构的相关函数库以便在程序设计中调用可编辑doc文档格式.docx_第2页
第2页 / 共10页
设计出树结构的相关函数库以便在程序设计中调用可编辑doc文档格式.docx_第3页
第3页 / 共10页
设计出树结构的相关函数库以便在程序设计中调用可编辑doc文档格式.docx_第4页
第4页 / 共10页
设计出树结构的相关函数库以便在程序设计中调用可编辑doc文档格式.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

设计出树结构的相关函数库以便在程序设计中调用可编辑doc文档格式.docx

《设计出树结构的相关函数库以便在程序设计中调用可编辑doc文档格式.docx》由会员分享,可在线阅读,更多相关《设计出树结构的相关函数库以便在程序设计中调用可编辑doc文档格式.docx(10页珍藏版)》请在冰豆网上搜索。

设计出树结构的相关函数库以便在程序设计中调用可编辑doc文档格式.docx

应当提交的文件:

(1)课程设计学年论文。

(2)课程设计附件(主要是源程序)。

设计出树结构的相关函数库,以便在程序设计中调用

学生姓名:

指导老师:

摘要作为用户我们极少接触系统调用,但是我们熟悉C语言,对库函数的调用并不陌生。

C语言支持一系列库函数的调用,而事实上,库函数的调用是C语言在较高层次上调用的一种方式,函数调用是操作系统内核提供给程序员的程序设计界而,它们是内核提供给用户调用的函数。

使用MicrosoftVisualC++6.0设计二叉链表结构的相关函数库,操作系统通过执行main函数开始运行一个C程序。

main函数可以调用C程序屮的其他函数來完成程序的任务,其他函数也可以互相调用,但其他函数(非main函数)不能调用main函数(main函数只能由操

作系统来调用)。

关键词设计函数库;

C程序的执行;

C程序的调用;

C语言;

VC++6・0目录

1引言1

1.1课程设计目的1

1.2课程设计要求1

2问题的描述2

2.1问题的模型化描述2

3数据结构3

3.1定义二叉树结点类型3

4模块划分3

4.1入队3

4.2队列判空3

4.3出队4

4.4根据先序递归建立二叉树4

4.5递归遍历输出函数4

4.6层次遍历输出算法5

4.7求二叉树深度得算法5

4.8求二叉树叶子结点数的算法5

5运行程序6

6结束语8

附录:

源程序代码9

1引言

VisualC++6.0由许多织件组成,包括编辑器、调试器以及程序向导AppWizardx类向导ClassWizard等开发工具。

编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。

编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:

词法分析;

语法分析;

语义检查和中间代码生成;

代码优化;

目标代码生成。

主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。

将编译产生的・obj文件和系统库连接装配成一个可以执行的程序。

由于在实际操作中可以直接点击Bidld从源程序产生可执行程序,将源程序翻译成可执行文件的过程分为编译和链接两个独立的步骤,Z所以这样做,主要是因为:

在一个较大的复杂项目中,有很多人共同完成一个项目每个人可能承担其中一部分模块,其中有的模块可能是用汇编语言写的,有的模块可能是用VC写的,有的模块可能是用VB写的,有的模块可能是购买不是源程序模块而是目标代码或已有的标准库模块,因此,各类源程序都需要先各自编译成目标程序文件,再通过链接程序将这些目标程序文件连接装配成可执行文件,再调用函数或运行可执行程序文件。

1.1课程设计目的

(1)使用MicrosoftVisualC++6.0设计二叉链表结构的相关函数库

(2)在程序设计中调用设计二叉链表结构的相关函数库

(3)在程序设计屮调用并实现二叉树的各种基本函数以及常用函数。

(1)按要求编写课程设计报告书,能正确阐述设计结果。

(2)通过课程设计培养学生严谨的科学态度,认真的工作作风和团队协作精神。

(3)学会文献检索的基本方法和综合运用文献的能力。

(4)在老师的指导下,要求每个学牛独立完成课程设计的全部内容。

2.问题的描述

2.1问题的模型化描述

3数据结构

3.1定义二叉树结点类型

typedefchardatatype;

typedefstructNode

chardata;

structNode*Lchild;

structNode*Rchild;

BiTNode,^BiTrcc;

//二叉树节点,二叉链表

typedefstructQueueNode

BiTreedata;

structQueueNode*next;

LinkQueueNode;

//队列中的每个节点

typedefstruet

LinkQueueNode*front;

LinkQueueNode*rear;

LinkQueue;

//队列

4.模块划分

4.1入队

voidInitQueueLinkQueue*Q

Q-frontLinkQueueNode*mallocsizeofLinkQueueNode;

ifQ-front!

NULL

Q-rearQ-front;

Q-front-nextNULL;

elseprintf,z分配空间失败!

\n〃;

voidEnterQueueLinkQueue^Q,BiTreex

LinkQueueNode*NewNode;

NewNodeLinkQueueNode^malIocsizeofLinkQueueNode;

ifNewNode!

NcwNode-datax;

NewNode-nextNULL;

Q-rear-nextNewNode;

Q-rearNewNode;

4.3出队

intQucucIsEmptyLinkQucuc*Q

ifQ-frontQ-rear

return1;

elsereturn0;

4.4根据先序递归建立二叉树

voidDclctcQueueLinkQucue*Q,BiTrcc*x

LinkQueueNode*p;

return;

pQ-front-next;

Q-front-nextp-next;

ifQ-rearp

*xp-data;

freep;

4.5递归遍历输出函数

voidCreateBiTreeBiTree*bl

charch;

chgetchar;

ifch'

.'

*btNULL;

else

*btBiTreemallocsizeofBiTNode;

*bt-datach;

CreateBiTree&

*bt-Lchild;

*bt-RchiId;

/*先序递归遍历二叉树*/

voidPreOrderBiTreeroot

ifroot!

printf〃%c,z,root-data;

PreOrderroot-LchiId;

PreOrderroot-RchiId;

/*后序递归遍历二叉树*/

4.6层次遍历输出算法

voidPostOrderBiTreeroot

PostOrderroot-Lchild;

PostOrderroot-Rchild;

printf/z%c,z,root-data;

voidTnOrderBiTreeroot

InOrderroot-LchiId;

printf"

%c,z,root-data;

InOrderroot-RchiId;

4.7求二叉树深度得算法

voiddepthBiTreeroot,int&

dep

intdepl,dep2;

if!

rootdepO;

dcpthroot-LchiId,dcpl;

dcpthroot-RchiId,dcp2;

dcpdcpldcp2?

dcpl+l:

dep2+l;

4.8求二叉树叶子结点数的算法

voidcountleafBiTreeroot,int&

n

ifroot

countleafroot-LchiId,n;

root-Lchild&

&

!

root-Rchild

n++;

coun11eafroot-Rchi1d,n;

5运行程序

5.1程序运行结果7结束语

本次课程设计为时二周,我选的课题是设计岀树结构的相关函数库,以便在程序设计中的调用。

其主要研究内容在于实现了二叉链表的相关函数库的调用。

为了实现以链表为存储结构的二叉树的有关操作,要熟练掌握二叉链表的特性,但对于一些算法较为复杂,代码量多些,容易出现一些变量的定义、函数声明、函数调用等细节上的问题出错。

在本程序的设计过程屮,为了克服以上困难,采取了一些措施:

建立清晰的程序设计的步骤方法,分步各个模块程序设计,进行仔细的总体结构设计,反复调试、细心观察达到完善整个系统等。

二叉树的递归算法主要是将二叉树存储到链表结构中。

遍历是二叉树各种操作的基础,先序、中序、后序是二叉树遍历的三种基木遍历方法。

而这些都是数据结构的基础内容,是我们必须理解和牢记的基础知识。

将这些基础算法综合起来,更能清晰地认识和理解各种算法的作用。

当然,要学会编程不会仅局限于课本知识,而是根据课本知识进行有效的拓展,并且不得不学会在众多的参考资料中搜索有用的自己所需的知识,并迫使自己去学习掌握它们,从中不断提高自己。

虽然程序规模不大,我们依然为此付出了努力,仍免不了各种错误的出现。

编程过程需要很大的毅力和耐心,而且要有良好的思维和扎实的专业基础知识,所以我们需要不断的学习,发现自身不足之处并改止它,逐步提高自身能力,不断取得进步。

对于数据结构的学习,一直感到很吃力,也想过放弃。

通过实践,我们接触到了很多关于的MicrosoftVisualC++6.0编程让我们认识到知识的运用性,并加深对基础知识的理解,从中了解自己需要学习的东西并学会自学。

在此我们要感谢我的老师对我们专心致志的辅导,让我们学会了许多分析和解决问题的方法,让我们受益匪浅。

通过几个星期的努力,虽然从中也发现了&

己很多不足,可能其中还有不少问题,但我觉得

最重要的是自己也从屮得到很多;

不敢说百分百的完成也应该基本上完成了课题任务,成功地实现课题目标。

参考文献

[1]严蔚敏.数据结构(C语言版)[M]・北京:

清华大学出版社,1997.

[2]谭浩强.C程序设计(第三版)[M].北京:

清华大学出版社,2005.1附录:

源程序代码

ttinclude

typcdcfstructNode

BiTNode,^BiTree;

typedefstructQucueNode

LinkQueueNode;

typedefstruct

LinkQueueNode*fTont;

//队列

Q-front-next

NULL;

elseprintfz,分配空间失败!

\n〃;

/*入队*/

voidEnterQueueLinkQueue*Q,BiTreex

NewNodeLinkQueueNode*mallocsizeofLinkQueueNode;

ifNewNode!

MULL

NewNode-data

x;

NewNode-next

Q-rcar-ncxt

NewNode;

/*队列判空*/

intQueueIsEmpt^^LinkQueue*Q

/*出队*/

voidDeleteQueueLinkQueueBiTree*x

/*利用扩展先序遍历序列

创建二叉链表*/

voidCreateB订reeB订ree*bt

ifch*btNULL;

*bt~datach;

CrcatcBiTrcc&

^bt-Lch订d;

PreOrderroot-Lchild;

PreOrdcrroot-RchiId;

PostOrderroot-LehiId;

printf/z%cz/,root-data;

voidInOrderBiTreeroot

TnOrderroot-Lchild;

printfz,%croot-data;

/*层序遍历

对给定的二叉树进行层序遍历*/

voidLayerOrderBiTreeroot

BiTree*x;

//这里要记得申请空间xBiTrcc*mallocsizcofBiTrcc;

ifxNULLprintf,z内存分配失败!

LinkQueue*Q;

QLinkQueue*mcillocsizeofLinkQueue;

InitQueueQ;

"

、*x-data;

if*x-LchildEnterQueueQ,*x-Lchild;

if*x-RchildEnterQueueQ,*x-Rch订d;

rootdcpO;

depthroot-LchiId,depl;

depthroot-RchiId,dep2;

depdepldep2?

depl+l:

deP2+1;

intmainintargc、char**argv

intnO,dep;

BiTrccroot;

CrcatcBiTrcc&

root;

printf〃先序递归遍历:

PreOrderroot;

printf〃\n〃;

printf"

中序递归遍历:

InOrderroot;

printf,z\n"

;

后序递归遍历:

\n,z;

PostOrderroot;

printf〃\rT;

printf〃层序遍历:

LayerOrderroot;

printf〃\n〃;

depthroot,dep;

printf〃深度dep%d\n〃,dep;

countleafroot,n;

prin叶子结点数n%d\nz\n;

return0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 商业计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1