数据结构实验四.docx
- 文档编号:29323160
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:13
- 大小:17.64KB
数据结构实验四.docx
《数据结构实验四.docx》由会员分享,可在线阅读,更多相关《数据结构实验四.docx(13页珍藏版)》请在冰豆网上搜索。
数据结构实验四
贵州大学实验报告
学院:
计信学院专业:
通信工程班级:
通信091
姓名
何川
学号
0908060235
实验组
实验时间
2011.12、
指导教师
陈静
成绩
实验项目名称
二叉树操作
实验目的
1、熟悉二叉树结点的结构和对二叉树的基本操作及具体实现。
2、利用递归方法编写对二叉树的各种遍历算法。
3、掌握递归方法在二叉树中的使用。
实验要求
1、认真阅读和掌握本实验内容所给的全部程序。
2、在VisualC++6.0集成开发环境下编写和调试所有程序。
3、编写的所有算法须给出测试函数,并自行设计测试数据,对算法进行测试。
4、保存和打印出程序运行结果,并结合程序进行分析。
5、按照你对二叉树操作的需要,重新改写主文件并运行,打印出主文件清单
和运行结果。
实验原理
VisualC++的编译环境下,独立完成实验要求的内容,独立完成编写、编以
运行。
实验仪器
安装了VC++6.0的PC机
实验步骤
1、实现二叉树结点的定义和操作。
该程序包括一个头文件,用来存储定义二叉树结构类型以及对二叉树进行各种操作的函数声明;第二个为操作的实现文件,用来存储每一种操作的具体函数定义以及主函数。
二叉树的操作包括二叉树初始化、创建二叉树,判断二叉树是否为空,求二叉树的深度和结点数,遍历二叉树等。
2、已知二叉树的前序遍历序列和中序遍历序列,编写可唯一确定该二叉树的算法。
3、根据所给的n个带权叶子结点,编写算法构造哈夫曼树和哈夫曼编码。
实验内容
(1)typedefcharElemType;
structBTreeNode{
ElemTypedata;
BTreeNode*left;
BTreeNode*right;
};
voidInitBTree(BTreeNode*&BT);
voidCreatBTree(BTreeNode*&BT,char*a);
boolEmptyBTree(BTreeNode*BT);
voidTraverseBTree(BTreeNode*BT);
intBTreeDepth(BTreeNode*BT);
intBTreeCount(BTreeNode&BT);
voidPrintBTree(BTreeNode*BT);
#include
#include
usingnamespacestd;
voidInitBTree(BTreeNode*&BT){
BT=NULL;
}
voidCreatBTree(BTreeNode*&BT,char*a){
constintMaxSize=100;
BTreeNode*s[MaxSize];
inttop=-1;
BT=NULL;
BTreeNode*p;
intk;
inti=0;
while(a[i]){
switch(a[i]){
case'':
break;
case'(':
if(top==MaxSize-1){
cout<<"栈空间不够,请重新分配栈空间!
"< exit (1); } top++; s[top]=p; k=1; break; case')': if(top==-1){ cout<<"二叉树广义表字符串错! "< exit (1); } top--; break; case',': k=2; break; default: p=newBTreeNode; p->data=a[i]; p->left=p->right=NULL; if(BT==NULL) BT=p; else{ if(k==1) s[top]->left=p; else s[top]->right=p; } } i++; } } boolEmptyBTree(BTreeNode*BT){ returnBT==NULL; } voidTraverseBTree(BTreeNode*BT){ if(BT! =NULL){ cout< TraverseBTree(BT->left); TraverseBTree(BT->right); } } intBTreeDepth(BTreeNode*BT){ if(BT==NULL) return0; else { inti=BTreeDepth(BT->left); intj=BTreeDepth(BT->right); if(i>j) returni+1; else returnj+1; } } intBTreeCount(BTreeNode*BT){ if(BT==NULL) return0; else { inti=BTreeCount(BT->left); intj=BTreeCount(BT->right); returni+j+1; } } voidPrintBTree(BTreeNode*BT){ if(BT! =NULL){ cout< if(BT->left! =NULL||BT->right! =NULL){ cout<<'('; PrintBTree(BT->left); if(BT->right! =NULL) cout<<','; PrintBTree(BT->right); cout<<')'; } } } voidmain(){ BTreeNode*bt; InitBTree(bt); charb[50]="A(B(C),D(E(F,G),H(,I)))"; CreatBTree(bt,b); PrintBTree(bt); cout< cout<<"前序: "; TraverseBTree(bt); cout< cout<<"二叉树的深度为: "; cout< cout<<"二叉树的结点总数为: "; cout< } BTreeNode*PreMinCreateTree(charpre[],charmin[],BTreeNode*&p,inti,intj,intlen){ BTreeNode*p,*q; for(i=0;i p->data=pre[i]; for(j=0;j pre[i]==min[j]; p->left=pre[i+1]; } (2)typedefcharElemType; structBTreeNode{ ElemTypedata; BTreeNode*left; BTreeNode*right; }; BTreeNode*PreMinCreateTree(charpre[],charmin[],BTreeNode*&p,inti,intj,intlen); intPosition(ElemTypex,chara[]); voidPrintBTree(BTreeNode*BT); #include"PreMinCreateTree.h" #include #include usingnamespacestd; intPosition(ElemTypex,chara[]){ inti; for(i=0;i<8;i++) if(x==a[i]) returni; } BTreeNode*PreMinCreateTree(charpre[],charmin[],BTreeNode*&p,inti,intj,intlen){ intm,leftlen,rightlen; if(len<=0) p=NULL; else{ p=newBTreeNode; p->data=pre[i]; m=Position(pre[i],min); leftlen=m-j; rightlen=len-(leftlen+1); PreMinCreateTree(pre,min,p->left,i+1,j,leftlen); PreMinCreateTree(pre,min,p->right,i+leftlen+1,m+1,rightlen); } returnp; } voidPrintBTree(BTreeNode*BT){ if(BT! =NULL){ cout< if(BT->left! =NULL||BT->right! =NULL){ cout<<'('; PrintBTree(BT->left); if(BT->right! =NULL) cout<<','; PrintBTree(BT->right); cout<<')'; } } } voidmain(){ charpre[]={'a','b','c','d','e','f','g','h'}; charin[]={'c','b','d','a','f','e','h','g'}; BTreeNode*p; intprestart=0; intpreend=7; intinstart=0; intinend=7; BTreeNode*bt; bt=PreMinCreateTree(pre,in,p,0,0,8); PrintBTree(bt); cout< } (3))typedefintElemType; structBTreeNode{ ElemTypedata; BTreeNode*left; BTreeNode*right; }; BTreeNode*CreateHuffman(ElemTypea[],intn); voidHuffManCoding(BTreeNode*FBT,intlen); ElemTypeWeightPathLength(BTreeNode*FBT,intlen); voidPrintBTree(BTreeNode*BT); #include"huffman.h" #include #include usingnamespacestd; typedefintElemType; structBTreeNode{ ElemTypedata; BTreeNode*left; BTreeNode*right; }; BTreeNode*CreateHuffman(ElemTypea[],intn){ BTreeNode**b,*q; b=newBTreeNode*[n]; inti,j; for(i=0;i b[i]=newBTreeNode; b[i]->data=a[i]; b[i]->left=b[i]->right=NULL; } for(i=1;i intk1=-1,k2; for(j=0;j if(b[j]! =NULL&&k1==-1){ k1=j; continue; } if(b[j]! =NULL){ k2=j; break; } } for(j=k2;j if(b[j]! =NULL){ if(b[j]->datadata) { k2=k1; k1=j; } elseif(b[j]->datadata)k2=j; } } q=newBTreeNode; q->data=b[k1]->data+b[k2]->data; q->left=b[k1]; q->right=b[k2]; b[k1]=q; b[k2]=NULL; } delete[]b; returnq; } ElemTypeWeightPathLength(BTreeNode*FBT,intlen){ if(FBT==NULL)return0; else{ if(FBT->left==NULL&&FBT->right==NULL){ returnFBT->data*len; } else{ returnWeightPathLength(FBT->left,len+1)+WeightPathLength(FBT->right,len+1); } } } voidHuffManCoding(BTreeNode*FBT,intlen){ staticinta[10]; if(FBT! =NULL){ if(FBT->left==NULL&&FBT->right==NULL){ cout<<"节点权值为"< ";
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)