欢迎来到天天文库
浏览记录
ID:49718825
大小:390.50 KB
页数:14页
时间:2020-03-02
《树的基本操作实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、.实验报告--------数据结构课程设计存储结构与基本运算的算法要求:实现树与二叉树的转换的实现。以及树的前序、后序的递归、非递归算法,层次序的非递归算法的实现,应包含建树的实现。学院:专业:班级:学号:姓名:范文..目录1.课程设计的目的32.问题描述33.需求分析34.模块设计35.系统主要子程序的详细设计36.调试分析7总结68、参考文献:69、程序清单:610、程序运行结果10范文..1.课程设计的目的(1)熟练使用C语言编写程序,解决实际问题;(2)了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;(3)初步掌握
2、软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;(4)提高综合运用所学的理论知识和方法独立分析和解决问题的能力;2.问题描述(1)存储结构与基本运算的算法要求:实现树与二叉树的转换的实现。以及树的前序、后序的递归、非递归算法,层次序的非递归算法的实现,应包含建树的实现。3.需求分析1.建立树2.树与二叉树的转换3.树的先序遍历(递归和非递归算法)4.树的后序遍历(递归和非递归算法)5.层次序的非递归算法的实现4.模块设计(1)voidCreateTree(Tree*tr)//建立树(2)voidPreOrder(Treer
3、oot)//先序遍历树递归算法(3)voidPreOrderTraverse(TreeT)//先序遍历树非递归算法(4)voidInOrder(Treeroot)//后序遍历树递归算法(5)voidInOrderTraverse(TreeT)//后序遍历树非递归算法(6)voidLevelOrder(TreeT)//层次遍历树(7)voidmainwork()//主函数。创建树,调用工作区模块函数5.系统主要子程序的详细设计(1)voidCreateTree(Tree*tr){//按照先序范文..charch;scanf("%c",&ch)
4、;if(ch=='#')*tr=NULL;else{*tr=(Tree)malloc(sizeof(TNode));//生成一个新结点(*tr)->data=ch;CreateTree(&((*tr)->firstchild));//生成左子树CreateTree(&((*tr)->nextsibling));//生成右子树}}voidTree_to_BiTree(Tree*tr,BiTree*bt){if(*tr==NULL)*bt=NULL;else{*bt=(BiTree)malloc(sizeof(BiTNode));(*bt)->
5、data=(*tr)->data;Tree_to_BiTree(&((*tr)->firstchild),&((*bt)->LChild));Tree_to_BiTree(&((*tr)->nextsibling),&((*bt)->RChild));}}//(2)树型打印二叉树voidTranslevelPrint(BiTreebt){//本算法实现二叉树的按层打印structnode{BiTreevec[MAXLEN];//存放树结点intlayer[MAXLEN];//结点所在的层intlocate[MAXLEN];//打印结点的位置
6、intfront,rear;}q;//定义队列qinti,j,k;intnLocate;j=1;k=0;q.front=0;//初始化队列q队头,队尾q.rear=0;printf("");q.vec[q.rear]=bt;//将二叉树根节点入队列q.layer[q.rear]=1;q.locate[q.rear]=20;q.rear=q.rear+1;while(q.front7、层打印时换行{printf("");printf("");j=j+1;k=0;while(kdata);q.front=q.front+1;if(bt->LChild!=NULL)//存在左子树,将左子树根节点入队列{q.vec[q.rear]=bt->LChild;q.layer[q.rear]=i+1;q.locate[q.rear]=8、(int)(nLocate-pow(2,NLAYER-i-1));q.rear=q.rear+1;}if(bt->RChild!=NULL)//存在右子树,将右子树根节点入队列{
7、层打印时换行{printf("");printf("");j=j+1;k=0;while(kdata);q.front=q.front+1;if(bt->LChild!=NULL)//存在左子树,将左子树根节点入队列{q.vec[q.rear]=bt->LChild;q.layer[q.rear]=i+1;q.locate[q.rear]=
8、(int)(nLocate-pow(2,NLAYER-i-1));q.rear=q.rear+1;}if(bt->RChild!=NULL)//存在右子树,将右子树根节点入队列{
此文档下载收益归作者所有