ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:28.90KB ,
资源ID:3885118      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3885118.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(大数据结构实验实现中序线索化二叉树构造哈夫曼树.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

大数据结构实验实现中序线索化二叉树构造哈夫曼树.docx

1、大数据结构实验实现中序线索化二叉树构造哈夫曼树实验报告课程名称 数据结构 实验项目名称 实现中序线索化二叉树,构造哈夫曼树班级与班级代码 实验室名称(或课室) SS1-204 专 业 软件工程 任课教师 学 号: 姓 名: 实验日期: 2011年 11 月 18 日 商学院教务处制 实验报告成绩 评价:评 价 项 目优良一般差实验任务是否明确实验步骤是否清晰详尽实验任务是否完成实验结果是否正确程序设计是否规标准版面整体效果是否美观 指导教师(签名) 2011 年 月 日说明:指导教师评分后,实验报告交院(系)办公室保存。实验题7.5实现中序线索化二叉树/*文件名:exp7-5.cpp*/#in

2、clude #include #define MaxSize 100typedef char ElemType;typedef struct node ElemType data; int ltag,rtag; /*增加的线索标记*/ struct node *lchild; struct node *rchild; TBTNode;void CreateTBTNode(TBTNode * &b,char *str) TBTNode *StMaxSize,*p=NULL; int top=-1,k,j=0; char ch; b=NULL; /*建立的二叉树初始时为空*/ ch=strj; w

3、hile (ch!=0) /*str未扫描完时循环*/ switch(ch) case (:top+;Sttop=p;k=1; break; /*为左结点*/ case ):top-;break; case ,:k=2; break; /*为右结点*/ default:p=(TBTNode *)malloc(sizeof(TBTNode); p-data=ch;p-lchild=p-rchild=NULL; if (b=NULL) /*p为二叉树的根结点*/ b=p; else /*已建立二叉树根结点*/ switch(k) case 1:Sttop-lchild=p;break; case

4、2:Sttop-rchild=p;break; j+; ch=strj; void DispTBTNode(TBTNode *b) if (b!=NULL) printf(%c,b-data); if (b-lchild!=NULL | b-rchild!=NULL) printf(); DispTBTNode(b-lchild); if (b-rchild!=NULL) printf(,); DispTBTNode(b-rchild); printf(); TBTNode *pre; /*全局变量*/void Thread(TBTNode *&p) if (p!=NULL) Thread(p

5、-lchild); /*左子树线索化*/ if (p-lchild=NULL) /*前驱线索*/ p-lchild=pre; /*建立当前结点的前驱线索*/ p-ltag=1; else p-ltag=0; if (pre-rchild=NULL) /*后继线索*/ pre-rchild=p; /*建立前驱结点的后继线索*/ pre-rtag=1; else pre-rtag=0; pre=p; Thread(p-rchild); /*右子树线索化*/ TBTNode *CreaThread(TBTNode *b) /*中序线索化二叉树*/ TBTNode *root; root=(TBTNo

6、de *)malloc(sizeof(TBTNode); /*创建根结点*/ root-ltag=0;root-rtag=1; root-rchild=b; if (b=NULL) /*空二叉树*/ root-lchild=root; else root-lchild=b; pre=root; /*pre是*p的前驱结点,供加线索用*/ Thread(b); /*中序遍历线索化二叉树*/ pre-rchild=root; /*最后处理,加入指向根结点的线索*/ pre-rtag=1; root-rchild=pre; /*根结点右线索化*/ return root;void ThInOrder

7、(TBTNode *tb) TBTNode *p=tb-lchild; /*指向根结点*/ while (p!=tb) while (p-ltag=0) p=p-lchild; printf(%c ,p-data); while (p-rtag=1 & p-rchild!=tb) p=p-rchild; printf(%c ,p-data); p=p-rchild; void main() TBTNode *b,*tb; CreateTBTNode(b,A(B(D,E(H(J,K(L,M(,N),C(F,G(,I); printf( 二叉树:);DispTBTNode(b);printf(n)

8、; tb=CreaThread(b); printf( 线索中序序列:);ThInOrder(tb);printf(n);结果截图:7.6构造哈夫曼树/*文件名:exp7-6.cpp*/#include #include #define N 50 /*叶子结点数*/#define M 2*N-1 /*树中结点总数*/typedef struct char data5; /*结点值*/ int weight; /*权重*/ int parent; /*双亲结点*/ int lchild; /*左孩子结点*/ int rchild; /*右孩子结点*/ HTNode;typedef struct

9、char cdN; /*存放哈夫曼码*/ int start; HCode;void CreateHT(HTNode ht,int n) int i,k,lnode,rnode; int min1,min2; for (i=0;i2*n-1;i+) /*所有结点的相关域置初值-1*/ hti.parent=hti.lchild=hti.rchild=-1; for (i=n;i2*n-1;i+) /*构造哈夫曼树*/ min1=min2=32767; /*lnode和rnode为最小权重的两个结点位置*/ lnode=rnode=-1; for (k=0;k=i-1;k+) if (htk.p

10、arent=-1) /*只在尚未构造二叉树的结点中查找*/ if (htk.weightmin1) min2=min1;rnode=lnode; min1=htk.weight;lnode=k; else if (htk.weightmin2) min2=htk.weight;rnode=k; htlnode.parent=i;htrnode.parent=i; hti.weight=htlnode.weight+htrnode.weight; hti.lchild=lnode;hti.rchild=rnode; void CreateHCode(HTNode ht,HCode hcd,int

11、 n) int i,f,c; HCode hc; for (i=0;in;i+) /*根据哈夫曼树求哈夫曼编码*/ hc.start=n;c=i; f=hti.parent; while (f!=-1) /*循序直到树根结点*/ if (htf.lchild=c) /*处理左孩子结点*/ hc.cdhc.start-=0; else /*处理右孩子结点*/ hc.cdhc.start-=1; c=f;f=htf.parent; hc.start+; /*start指向哈夫曼编码最开始字符*/ hcdi=hc; void DispHCode(HTNode ht,HCode hcd,int n)

12、int i,k; int sum=0,m=0,j; printf( 输出哈夫曼编码:n); /*输出哈夫曼编码*/ for (i=0;in;i+) j=0; printf( %s:t,hti.data); for (k=hcdi.start;k=n;k+) printf(%c,hcdi.cdk); j+; m+=hti.weight; sum+=hti.weight*j; printf(n); printf(n 平均长度=%gn,1.0*sum/m);void main() int n=15,i; char *str=The,of,a,to,and,in,that,he,is,at,on,for,His,are,be; int fnum=1192,677,541,518,462,450,242,190,181,174,157,124,123; HTNode htM; HCode hcdN; for (i=0;in;i+) strcpy(hti.data,stri); hti.weight=fnumi; printf(n); CreateHT(ht,n); CreateHCode(ht,hcd,n); DispHCode(ht,hcd,n); printf(n);结果截图:

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

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