


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验名称实验六哈夫曼编码和译码的算法设计与实现实验日期2022-04-22实验室信息系统设计与仿真室1实验台号34号信工11-1BF李煌班级峰实验方案实验成绩实验操作实验结果、实验目的1根据算法设计需要,掌握哈夫曼编码的二叉树结构表示方法;2、编程实现哈夫曼编译码器;3、掌握贪心算法的一般设计方法。、预习与参考1、 认真阅读数据结构教材和算法设计教材内容,熟悉哈夫曼编码的原理;2、设计和编制哈夫曼编译码器。参考数据类型或变量typedef ElemType char ;typedef struct no deint w;int flag;ElemType c;struct node *plin
2、k,*llink,*rlink;char codem;Node;Node *numn , *root;参考 子程序接口与功能描述void SetTree( NODE *root )功能:从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树void En Code( Node *p )功能:利用已建好的哈夫曼树,对输入的正文进行编码void DeCode( void )功能 : 利用已建好的哈夫曼树,将输入的代码进行译码三、实验要求上机实验时,一人一组,独立上机,熟练运用二叉树与贪心思想对数据进行压缩。四、实验步骤1、 设计 SetTree 的测试方案和程序 , 输入测试数据 , 修改并
3、调试程序 , 直至正确为止2、设计EnCode的测试方案和程序,输入测试数据,修改并调试程序,直至正确为止3、设计DeCode的测试方案和程序,输入测试数据,修改并调试程序,直至正确为止4、 将你的程序整理成功能模块存盘备用。5、 将写的程序如下:#include <stdio.h>#include <string.h>#include <math.h>#include <string>#define maxn 20 / 最大结点数目#define inf 0xfffffff /无穷大typedef struct nodedouble w;int
4、 flag;int c;struct node *plink,*llink,*rlink;char codemaxn;int codelen;node() / 初始化节点flag=0;llink=NULL;plink=NULL;rlink=NULL;codelen=0; node;node *num2*maxn-1;/ 指针数组int n;void SetTree(node *&root)/从终端读入字符集大小n,以及n个字符和 n个权值,建立哈夫曼树int i,m,j;scanf("%d",&n);/ 输入结点个数 nfor(i=0;i<n;i+)n
5、umi=new node();numi->c=i;scanf("%lf",&numi->w);/输入结点的权值m=n;double min1,min2;int pos1=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;else if(numj->w<min
6、2)min2=numj->w;pos2=j;numpos1->flag=1; / 将 pos1 和 pos2 合并在新结点中,作为新节点的子 节点numpos2->flag=1;numn=new node(); / 新节点编号从 n 开始 numn->c=-1;/ 添加代码,建立新结点 n/ / 建立新结点 n numn->w=numpos1->w+numpos2->w;numn->llink=numpos1; numn->rlink=numpos2; numpos1->plink=numn;numpos2->plink=num
7、n;n+;root=numn-1;n=m;void EnCode(node *root,int deep,char code) / 利用已建好的哈夫曼树,对输入 的文本进行编码int i;if(root->c!=-1)for(i=0;i<deep;i+)root->codei=codei;root->codelen=deep;return;codedeep='0' /左节点编码为 0EnCode(root->llink,deep+1,code);codedeep='1' /右节点编码为 1EnCode(root->rlink,
8、deep+1,code);对输入的代码进/ 根据 codeivoid DeCode(node *root,char code) /利用已建好的哈夫曼树,行译码int i;node *temproot=root;int len=strlen(code);int ansmaxn,anslen=0;for(i=0;i<len;i+)/ 添加代码,根据 codei 的值确定 temproot 的指向 / 的值确定 temproot 的指向if(codei='0') temproot=temproot->llink;elsetemproot=temproot->rlin
9、k; if(temproot->c!=-1) ansanslen+=temproot->c; temproot=root;if(temproot->llink=NULL && temproot->rlink=NULL)printf(" 你输入的数据不存在于该哈弗曼树中 !n"); return;printf(" 输入数据的译码为: n");for(i=0;i<anslen;i+)printf("%d",ansi);printf("n");void print()int
10、i,j;for(i=0;i<n;i+)printf("%.2f:",numi->w);for(j=0;j<numi->codelen;j+)printf("%c",numi->codej); printf("n");int main()freopen("in.txt","r",stdin);freopen("out.txt","w",stdout);node *root=NULL;root=new node();SetTree(root);char codemaxn*maxn;EnCode(root,0,code);print();:n");printf(" 按上面的编码规那么输入代码 scanf("%s",code);DeCode(root,code); return 0;五、测试输入80.6 0.2 0.05 0.05 0.03
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 有线电视传输网络无线充电技术应用考核试卷
- 皮革服装绿色制造实践考核试卷
- 绢纺厂的环境管理体系认证与实施考核试卷
- 2025年深圳市个人房产买卖合同
- 2025工程合同补充协议书范本
- 2025年自建房屋租赁合同范本
- 第01讲 两条直线的位置关系(原卷板)
- 苏州市厂房工程施工组织设计 工业建筑钢结构厂房施工方案组织设计技术标技术交底措施要求资料
- 全市煤矿“一矿一策”安全监管监察实施方案
- 职工离岗创业合同二零二五年
- 二年级下册递等式计算练习400题及答案
- 医院应急调配机制
- (格式已排好)国家开放大学电大《计算机应用基础(专)》终结性考试大作业答案任务一
- 市政工程监理规划范本(完整版)
- 起重机械产品质量证明书与合格证样表剖析
- 《机电传动控制》模块化实验装置设计
- 中秋节英文PPT
- 北师大版小学数学五年级上册单元练习题全册
- 职业病危害接触史证明
- 用款申请单模板
- 外包商准入、退出管理制度
评论
0/150
提交评论