下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验名称实验六哈夫曼编码和译码的算法设计与实现实验日期2012-04-22实验室信息系统设计与仿真室I实验台号34号信工11-1BF李煌班级峰实验方案实验成绩实验操作实验结果、实验目的1、根据算法设计需要,掌握哈夫曼编码的二叉树结构表示方法;2、编程实现哈夫曼编译码器;3、掌握贪心算法的一般设计方法。1、认真阅读数据结构教材和算法设计教材内容,熟悉哈夫曼编码的原理2、设计和编制哈夫曼编译码器。参考数据类型或变量typedefElemTypechar;typedefstructnode(intw;intflag;ElemTypec;structnode*plink,*llink,*rlink;c
2、harcodem;Node;Node*numn,*root;参考子程序接口与功能描述voidSetTree(NODE*root)功能:从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树voidEnCode(Node*p)功能:利用已建好的哈夫曼树,对输入的正文进行编码voidDeCode(void)功能:利用已建好的哈夫曼树,将输入的代码进行译码三、实验要求上机实验时,一人一组,独立上机,熟练运用二叉树与贪心思想对数据进行压缩。四、实验步骤1、设计SetTree的测试方案和程序,输入测试数据,修改并调试程序,直至正确为止2、设计EnCode的测试方案和程序,输入测试数据,修改并调试程
3、序,直至正确为止3、设计DeCode的测试方案和程序,输入测试数据,修改并调试程序,直至正确为止4、将你的程序整理成功能模块存盘备用。5、将写的程序如下:#include<stdio.h>#include<string.h>#include<math.h>#include<string>#definemaxn20/最大结点数目#defineinfOxfffffff/无穷大typedefstructnode(doublew;intflag;intc;structnode*plink,*llink,*rlink;charcodemaxn;intcod
4、elen;node()/初始化节点(flag=O;llink=NULL;plink=NULL;rlink=NULL;codelen=0;node;node*num2*maxn-1;/指针数组intn;voidSetTree(node*&root)/从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树inti,m,j;scanf("%d”,&n);/输入结点个数nfor(i=0;i<n;i+)numi=newnode();numi->c=i;scanf("%lf",&numi->w);/输入结点的权值m=n;doub
5、lemin1,min2;intpos1=0,pos2=0;for(i=0;i<m-1;i+)min1=inf;min2=inf;for(j=0;j<n;j+)/寻找权值最小的两个结点,保存在pos1和pos2中if(numj->flag=0)if(numj->w<min1)min1=numj->w;pos2=pos1;pos1=j;min2=numj->w;pos2=j;numpos1->flag=1;/将posl和pos2合并在新结点中,作为新节点的子节点numpos2->flag=1;numn=newnode();/新节点编号从n开始n
6、umn->c=-1;/添加代码,建立新结点n/建立新结点nnumn->w=numpos1->w+numpos2->w;numn->llink=numpos1;numn->rlink=numpos2;numpos1->plink=numn;numpos2->plink=numn;n+;root=numn-1;n=m;voidEnCode(node*root,intdeep,charcode)/利用已建好的哈夫曼树,对输入的文本进行编码(inti;if(root->c!=-1)(for(i=0;i<deep;i+)(root->co
7、dei=codei;root->codelen=deep;return;codedeep='0'/左节点编码为0EnCode(root->llink,deep+1,code);codedeep='1'/右节点编码为1EnCode(root->rlink,deep+1,code);voidDeCode(node*root,charcode)/利用已建好的哈夫曼树,对输入的代码进行译码(inti;node*temproot=root;intlen=strlen(code);intansmaxn,anslen=0;for(i=0;i<len;i
8、+)(/添加代码,根据codei的值确定temproot的指向/根据codei的值确定temproot的指向if(codei='0')temproot=temproot->llink;elsetemproot=temproot->rlink;if(temproot->c!=-1)(ansanslen+=temproot->c;temproot=root;if(temproot->llink=NULL&&temproot->rlink=NULL)(printf("你输入的数据不存在于该哈弗曼树中!n");re
9、turn;printf("输入数据的译码为:n");for(i=0;i<anslen;i+)(printf("%d”,ansi);printf("n");voidprint()(inti,j;for(i=0;i<n;i+)(printf("%.2f:",numi->w);for(j=0;j<numi->codelen;j+)printf("%c”,numi->codej);printf("n");intmain()(freopen("in.txt","r",stdin);freopen("out.txt","w",stdout);node*root=NULL;root=newnode();SetTree(root);charcodemaxn*maxn;EnCode(root,0,code);print();printf("按上面的编码规则输入代码:n");scanf("%s",code);DeCode(root,code);return0;五、测试输入80.60.20.050.050.030.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年武汉大学中南医院门诊部劳务派遣制导医招聘备考题库及完整答案详解一套
- 2026年普定县梓涵明德学校教师招聘备考题库(9名)及参考答案详解
- 会议室开会制度
- 2026年重庆医科大学附属康复医院关于党政办公室党建、宣传干事、医保办工作人员招聘备考题库参考答案详解
- 2026年深圳市龙华区第三实验学校附属善德幼儿园招聘备考题库完整参考答案详解
- 中学教学质量保证措施制度
- 2026年西安交通大学附属小学招聘备考题库附答案详解
- 2026年漯河市城乡一体化示范区事业单位人才引进备考题库及参考答案详解1套
- 2026年重庆护理职业学院(第一批)公开招聘工作人员备考题库及一套完整答案详解
- 中国人民银行所属企业网联清算有限公司2026年度校园招聘26人备考题库及完整答案详解一套
- 2025年大学大一(法学)法理学试题及答案
- 胆囊癌课件教学课件
- 广西2025年高等职业教育考试全区模拟测试 能源动力与材料 大类试题及逐题答案解说
- 2026江苏省公务员考试公安机关公务员(人民警察)历年真题汇编附答案解析
- 2025秋沪科版(五四制)(新教材)初中科学六年级第一学期知识点及期末测试卷及答案
- 超市冷库应急预案(3篇)
- 2025年10月自考00610高级日语(二)试题及答案
- 2025年中国潜孔钻机行业细分市场研究及重点企业深度调查分析报告
- 食品经营场所及设施设备清洗消毒和维修保养制度
- 名词单数变复数教案
- 入团考试题库(含答案)2025年
评论
0/150
提交评论