数据结构树和森林实验报告.docx

上传人:b****8 文档编号:10545276 上传时间:2023-02-21 格式:DOCX 页数:13 大小:67.53KB
下载 相关 举报
数据结构树和森林实验报告.docx_第1页
第1页 / 共13页
数据结构树和森林实验报告.docx_第2页
第2页 / 共13页
数据结构树和森林实验报告.docx_第3页
第3页 / 共13页
数据结构树和森林实验报告.docx_第4页
第4页 / 共13页
数据结构树和森林实验报告.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

数据结构树和森林实验报告.docx

《数据结构树和森林实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构树和森林实验报告.docx(13页珍藏版)》请在冰豆网上搜索。

数据结构树和森林实验报告.docx

数据结构树和森林实验报告

树和森林应用实验

实验报告

实验目的

(1)掌握树和森林的二叉链表表示方法。

(2)掌握树和二叉树的结构及算法之间的对应关系。

(3)掌握树的两种遍历算法及其应用。

实验运行环境

VisualC++

实验任务

为使实验程序简洁直观,下面的部分实验程序中的一些功能实现仍以调用库函数程序"trees.h"中的函数的形式给出,并假设该库函数中定义了树指针和结点类型分别为tree和tnode,以及部分常用运算,例如构建树(森林)、以某种方式显示树和森林等。

各运算的名称较为直观,因而易于理解。

读者可自行设计自己的库函数,也可到作者的网站下载。

说明2:

为便于数据的描述,和前面的实验一样,将测试数据结构列出,并以一个文件名的形式给出标注,例如测试数据名为tree1.tre的树,其具体结构形式参见附录中的树列表中的标有tree1.tre的树。

实验内容

第一题:

<1>将一棵树(或森林)转换为二叉树。

实验测试数据基本要求:

第一组数据:

tree1.tre

第二组数据:

tree2.tre

实验准备:

用广义表来表示树的数据,保存到文件中,通过文件流来读入数据,并根据读入的数据来创建树

第二题:

<2>求森林的高度。

实验测试数据基本要求:

第一组数据:

tree1.tre

第二组数据:

tree2.tre

第一组数据:

full41.cbt

第二组数据:

letter.cbt

实验准备:

遍历每一棵树,寻找高度的最大值。

可以设立一个私有成员来记录数的高度。

第三题:

<3>按层次方式遍历森林。

实验测试数据基本要求:

第一组数据:

tree1.tre

第二组数据:

tree2.tre

实验准备:

先访问第一层结点,并将它放入队列中,并反复从队列中取结点,访问其孩子结点,直至访问到叶子结点。

第四题:

<4>输出一个森林中每个结点的值及其对应的层次数。

实验测试数据基本要求:

第一组数据:

tree1.tre

第二组数据:

tree2.tre

实验准备:

使用递归函数来访问森林,同时输出层次数及结点值,使用形参来传递当前层次数

第五题:

<5>输出一个森林的广义表形式,如下图中的森林的输出为:

(a(b(c,d,e,f),g(h,i,j),k(l,m,n)),o(p(q)),r(s(t(u)),v(w(x,y,z))))

实验测试数据基本要求:

第一组数据:

tree1.tre

第二组数据:

tree2.tre

实验准备:

使用递归函数调用,若当前节点有左孩子,则先输出‘(’再访问下一节点,若当前节点的右指针不为空,则先输出‘,’再访问下一结点。

实验测试数据

 

 

实验程序

#include

usingnamespacestd;

typedefcharElemType;

#defineMAX200

typedefstructCSNode

{

ElemTypedata;

structCSNode*firstchild,*nejtsibling;

}

 

CSNode,*CSTree;

 

typedefstructBTNode

{

ElemTypedata;

structBTNode*lchild,*rchild;

}BTNode,*BTree;

 

classFOREST

{

public:

FOREST();

CSTreereturnT();//输出森林的根结点

BTreereturnBT();//输出森林的根结点

CSTreecreat(CSTree&T);//创建森林

BTreechange(CSTree&T,BTree&BT1);//将森林转换成为二叉树

voidfirst(CSTree&T,inti);

//第一题:

按照先序遍历的方式来输出树林每个结点的值以及层次

voidsecond(CSTree&T);//第五题:

输出一个森林的广义表形式

voidthird(constCSTree&T);//第三题:

按层次方式遍历森林。

voidfourth(BTree&BT);//第四题:

按照先序遍历的方式来输出二叉树每个结点的值

inthigth(constCSTree&T);//第二题:

求森林的高度

private:

CSTreeT;//森林的头结点

BTreeBT;//二叉树的头结点

inthigh;//森林的高度

};

 

FOREST:

:

FOREST()

{

high=0;

T=NULL;

BT=NULL;

}

 

CSTreeFOREST:

:

returnT()

{

returnT;

}

 

BTreeFOREST:

:

returnBT()

{

returnBT;

}

 

CSTreeFOREST:

:

creat(CSTree&T)

{

inta,b;

T=newCSNode;

cin>>T->data>>a>>b;

if(a==1)T->firstchild=NULL;

elsecreat(T->firstchild);

if(b==1)T->nejtsibling=NULL;

elsecreat(T->nejtsibling);

returnT;

}

 

BTreeFOREST:

:

change(CSTree&T,BTree&BT)

{

if(!

T){BT=NULL;returnNULL;}

BT=newBTNode;

BT->data=T->data;

if(!

T->firstchild)BT->lchild=NULL;

elsechange(T->firstchild,BT->lchild);

if(!

T->nejtsibling)BT->rchild=NULL;

elsechange(T->nejtsibling,BT->rchild);

returnBT;

}

voidFOREST:

:

first(CSTree&T,inti)

{

if(!

T)return;

cout<data<<""<

if(T->firstchild)first(T->firstchild,i+1);

if(T->nejtsibling)first(T->nejtsibling,i);

}

voidFOREST:

:

second(CSTree&T)

{

if(!

T)return;

cout<data;

if(T->firstchild){

cout<<'(';

second(T->firstchild);

}

if(T->nejtsibling){

cout<<',';

second(T->nejtsibling);

}

elsecout<<')';

}

voidFOREST:

:

third(constCSTree&T)

{

CSTreeS[MAX];

CSTreep;

intj=1,i=1;

p=T;

while(p){

S[i++]=p;

p=p->nejtsibling;

}

while(i!

=j)

{

CSTreeq;

q=S[j++];

cout<data<<"";

q=q->firstchild;

while(q){

S[i++]=q;

q=q->nejtsibling;

}

}

}

voidFOREST:

:

fourth(BTree&BT)

{

if(!

BT)return;

cout<data<<"";

if(BT->lchild)fourth(BT->lchild);

if(BT->rchild)fourth(BT->rchild);

}

intFOREST:

:

higth(constCSTree&T)

{

inths,hb;

if(!

T)

{

return0;

}

hs=higth(T->firstchild);

hb=higth(T->nejtsibling);

high=(hs+1)>hb?

(hs+1):

hb;

returnhigh;

}

intmain(){

FORESTf_1,f_2,f_3,f_4,f_5;

intchioce;

cout<

cout<<"数据结构实验五--树和森林应用实验"<

cout<

cout<<"第1题:

将一棵树(或森林)转换为二叉树"<

cout<<"第2题:

求森林的高度"<

cout<<"第3题:

按层次方式遍历森林"<

cout<<"第4题:

输出一个森林中每个结点的值及其对应的层次数"<

cout<<"第5题:

输出一个森林的广义表形式"<

cout<<"退出程序:

0"<

cout<

cout<<"请选择一道题"<

cin>>chioce;

switch(chioce)

{

case1:

{

cout<<"请输入森林的元素"<

CSTreep1;BTreep;

p1=f_1.returnT();p=f_1.returnBT();

p1=f_1.creat(p1);

p=f_1.change(p1,p);

cout<<"按照二叉树先序遍历的结果是:

"<

f_1.fourth(p);

cout<

break;

}

case2:

{

cout<<"请输入森林的元素"<

CSTreep2;p2=f_2.returnT();

p2=f_2.creat(p2);

cout<<"森林的高度是:

";

cout<

cout<

break;

}

case3:

{

cout<<"请输入森林的元素"<

CSTreep3;p3=f_3.returnT();

p3=f_3.creat(p3);

cout<<"按照层次遍历的结果是:

"<

f_3.third(p3);

cout<

break;

}

case4:

{

cout<<"请输入森林的元素"<

CSTreep4;p4=f_3.returnT();

p4=f_3.creat(p4);

cout<<"按照森林先序遍历输出的结果是输出"<

cout<<"一个森林中每个结点的值及其对应的层次数:

"<

f_3.first(p4,1);

cout<

break;

}

case5:

{

cout<<"请输入森林的元素"<

CSTreep5;p5=f_3.returnT();

p5=f_3.creat(p5);

cout<<"输出一个森林的广义表形式:

"<

f_3.second(p5);

cout<

break;

}

case0:

{

cout<<"EXIT"<

break;

}

default:

{

cout<<"输入错误,请重新输入"<

}

}

return0;

}

 

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

当前位置:首页 > 高等教育 > 经济学

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

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