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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构 实验5.docx

1、数据结构 实验5 数据结构实验报告年级 2012级 学号 姓名 成绩:专业 计算机科学与技术 实验地点 指导教师 实验项目 实验五 二叉树 实验性质 综合性 实验日期一、实验目的:1、掌握二叉树的链式存储结构及其相关操作的实现。2、掌握二叉树的先序、中序、后序的递归遍历算法。3、理解二叉树的各种非递归遍历算法的实现。二、实验内容与要求:1、实验题目一:二叉树的创建、递归遍历及其它基本操作的实现。要求:定义用二叉链表表示的二叉树,并实现二叉树的创建、遍历(先序、中序后序)的递归算法及求深度操作等,并对其进行验证。2、实验题目二:哈夫曼树及哈夫曼编码的算法实现要求:编程实现哈夫曼树的创建及利用哈夫

2、曼树求解哈夫曼编码。三、实验问题描述: 设计一个程序exp76.cpp,构造一棵哈夫曼树,输出对应的哈弗曼编码和平均查找长度,并用数据进行验证。如:单词(the)出现的频率为1192.四、实验步骤1实验问题分析本试验中主要是大量运用到了c语言里的for循环语句、if语句以及case语句,程序中用到了break来跳出case语句执行的循环变量等。2功能(函数)设计struct HuffmanTreeint weight;int parent,lchild,rchild;char ch;typedef char* HuffmanCode;struct return_value_selint re_

3、s1;int re_s2;五、实验结果(程序)及分析#include#include#include#includestruct HuffmanTreeint weight;int parent,lchild,rchild;char ch;typedef char* HuffmanCode;struct return_value_selint re_s1;int re_s2;struct return_value_defchar re_p100;int *re_in;int re_count;struct return_value_HTHCHuffmanTree *re_HT;HuffmanC

4、ode re_HC;return_value_def def_wei(char in_ch)char ch100;int ch_wei100;int i,j,n = 0,tab = 1;return_value_def re;for(i = 0;in_chi != 0;i+)for(j = 0;j =1;i-)if(HTi.parent=0 & HT_wei=HTi.weight) HT_wei = HTi.weight; s1 = i;if(s1=t)HT_wei = HTt-1.weight;else HT_wei = HTt.weight;for(i=t;i=1;i-)if(HTi.pa

5、rent=0 & HT_wei=HTi.weight & i!=s1)HT_wei = HTi.weight; s2 = i;re.re_s1 = s1;re.re_s2 = s2;return re;return_value_HTHC HuffmanCoding(HuffmanTree *HT,int *w,int n,char ch_in)int m,i;HuffmanTree *p;char *cd;HuffmanCode HC;return_value_HTHC re_value_HTHC;return_value_sel get_re;if(n=1) exit(0);m = 2 *

6、n - 1;HT = (HuffmanTree*)malloc(m+1)*sizeof(HuffmanTree);for(p=HT,i=1,p+;iweight = *w;p-lchild = 0;p-rchild = 0;p-parent = 0;p-ch = ch_ini-1;for(;iweight = 0;p-lchild = 0;p-rchild = 0;p-parent = 0;p-ch = NULL;for(i=n+1;i=m;+i)get_re = Select(HT,i-1);HTget_re.re_s1.parent = i;HTget_re.re_s2.parent =

7、i;HTi.lchild = get_re.re_s1;HTi.rchild = get_re.re_s2;HTi.weight = HTget_re.re_s1.weight + HTget_re.re_s2.weight;int c,f,start,j=0;HC = (HuffmanCode)malloc(n+1)*sizeof(char*);cd = (char *)malloc(n*sizeof(char);cdn-1 = 0;for(i=1;i=n;+i)start = n-1;for(c=i,f=HTi.parent;f!=0;c=f,f=HTf.parent)if(HTf.lch

8、ild=c) cd-start = 0;else cd-start = 1;HCi = (char*)malloc(n-start)*sizeof(char);strcpy(HCi,&cdstart);cout字符HTi.ch的编码为: HCiendl;free(cd);re_value_HTHC.re_HC = HC;re_value_HTHC.re_HT = HT;return re_value_HTHC;void HuffmanTrans(char* tran_ch,HuffmanTree *HT,int count)int i,n=count;cout译码结果为:endl;for(i=

9、0;tran_chi=0|tran_chi=1;i+)if(tran_chi=0)n = HTn.lchild;if(HTn.lchild=0&HTn.rchild=0)coutHTn.ch;n = count;elsen = HTn.rchild;if(HTn.lchild=0&HTn.rchild=0)coutHTn.ch;n = count;coutendl;void main()char edit_str100,trans_str1000,trans_str11000;int m100;int i,n,j,t=0;HuffmanTree *HT;return_value_def get

10、_value_def;return_value_HTHC get_value_HTHC;int start1 = 0;char choose_re = y,choose,ch10;while(choose_re=y|choose_re=Y)cout请选择您所将进行的操作!endl;cout(1)字符编码endl(2)需要对已编码过的字符译码endl(3)通过输入进行译码endlch;choose = ch0;for(;)if(choose != 1&choose!=2&choose!= 3&choose!=0)cout输入错误,请重新输入endl;cout1、字符编码endl2、对编码过的字符

11、译码endl3、通过输入进行译码endl0、退出endlch;choose = ch0;elsebreak;switch(choose)case 1:cout请输入您要编码的字符串:edit_str;cout进行编码.endl;get_value_def = def_wei(edit_str);for( i=0;iget_value_def.re_count;i+)mi = *(get_value_def.re_in+i);HT = (HuffmanTree*)malloc(2*get_value_def.re_count)*sizeof(HuffmanTree);get_value_HTHC

12、 = HuffmanCoding(HT,m,get_value_def.re_count,get_value_def.re_p);cout编码为:endl;for(n=0;edit_strn!=0;n+)for(j=0;j=get_value_def.re_count;j+)if(edit_strn=get_value_HTHC.re_HTj.ch)coutget_value_HTHC.re_HCj;for(int x=0;get_value_HTHC.re_HCjx=0|get_value_HTHC.re_HCjx=1;t+,x+)trans_str1t=get_value_HTHC.re_

13、HCjx;coutendl;start1 = 1;break;case 2:if(start1!=1)cout您还没有进行建立编码表,请先执行第一步操作!endl;break;HuffmanTrans(trans_str1,get_value_HTHC.re_HT,2*get_value_def.re_count-1);break; case 3:if(start1!=1)cout您还没有进行建立编码表,请先执行第一步操作!endl;break;cout请输入您要译的代码:trans_str;for(i=0;trans_stri!=0;i+)if(trans_stri!=0&trans_str

14、i!=1)cout输入中有非法字符,请重新输入!endl;cout请输入您要译的代码:trans_str;coutendl;HuffmanTrans(trans_str,get_value_HTHC.re_HT,2*get_value_def.re_count-1);break;case 0:break;cout是否继续进行操作(是:y 否:n )choose_re;for(;)if(choose_re != y&choose_re != Y&choose_re != n&choose_re != N)cout输入错误请重新输入!endl;cout是否继续进行操作(是:y 否:n )choose_re;elsebreak;六、结论与分析在本次实验中利用哈夫曼编码构造使电文编码的代码长度最短的编码方案,哈夫曼编码的实质就是使用频率越高的字符采用最短的编码,大概理解了二叉树的操作。

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

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