免费预览已结束,剩余3页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
07092030 刘言明数据结构作业之 -Huffman二叉树的使用班 级: 070921姓 名: 刘言明学 号: 07092030报告名称: Huffman二叉树的使用上机时间: 2010/10/22报告时间: 2010/10/24摘要实验目的: 加深理解树及二叉树的逻辑结构、存储结构 掌握树及二叉树上基本运算的实现 学会使用Huffman编码对数据进行无损压缩的原理 理解Huffman二叉树的概念 一步理解和熟练掌握课本中所学的各种数据结构,学会如何把学到的知识用于解决实际问题实验方法: 利用哈夫曼二叉树用关知识,和最优二叉树解法,综合考虑各种因素,定义结构体变量,和其它函数的综合运用来实现对输入的数字考虑权值用二叉树方法表示,并利用哈夫曼编码的知识,将其转化成为最优二叉树,求出编码表示数,输入字符将其转化为编码,并进行译码,并用函数输入最后结果。实验结果:1. 读入输入字符的总数2. 分别读入每个结点的值和权值3. 构造最优二叉树,输出哈夫曼编码4. 读入一串字符,将字符转化成编码形式5. 再通过编码进行译码,得到翻译后的字符并比对内容问题重述 读入个一个ASCII文件 统计文档中字符出现的频度,并根据频度对每个字符生成Huffman编码 打印原始数据、每个字符对应的Huffman编码以及原文档的Huffman编码 按Huffman树对编码后的数据进行解码 验证解码的结果 输出一些统计数据:总编码长度、编码效率等算法描述 首先,定义结构体变量,实现对哈夫曼二叉树的构造。 其次,构造其他函数,分别实现输入,输出,排序,转化等方法。 最后,通过函数和结构体的综合调用,实现题目的要求。函数说明一、 结构体定义说明1.动态分配数组储存哈夫曼树typedef struct int weight; char ch; int parent,lchild,rchild;HTNode,*HuffmanTree;2.哈夫曼编码结构体typedef structchar ch;char *chs;HuffmanCode;3.哈夫曼结构体typedef structchar ch;int weight;sw;typedef structHuffmanTree HT;HuffmanCode *HC;huf;二、 其它函数说明void select(HTNode * HT,int n,int *n1,int *n2)函数:选择在给定权值的两个结点中选择最小的权值的结点,其中*n1和*n2分别用来储存两个结点huf * HuffmanCoding(HuffmanTree HT,HuffmanCode *HC,sw *w,int n,huf *HUF)函数:主要进行哈夫曼编码,其中w存放n个字符的权值(均0),构造哈夫曼树HT,并求出n个字符的哈夫曼编码HC。void transcode(HuffmanTree ht,char *chars2,char*chars3)函数:进行译码的工作,将输入的字符根据哈夫曼编码进行译码执行结果input the mount of char:6input the 1th char and weight:e 45input the 2th char and weight:f 34input the 3th char and weight:a 58input the 4th char and weight:c 32input the 5th char and weight:s 51input the 6th char and weight:k 18e -001f -101a -01c -000s -11k -100input chars to translate:efacskkscafe#the chars translate are:00110101000111001001100001101001the chars are: efacskkscafe问题&解决在对于哈夫曼二叉树的讨论中,最难的问题应该在于建立最优二叉树的和将输入的数和其权值转化并输出。问题的解决方法当然是来源于网络,网络确实给了我很多的帮助,让我可以在困扰之中突然看到了光明,顿感网络的力量。其中二叉树的建立还好,从书上看到了不少例子,而对于转化的问题,在网上搜寻,并寻问其他会的人,其他的人最后得到方法,并得以完成报告。附录程序:#include#include#include#include/*节点定义*/typedef structint weight; char ch; int parent,lchild,rchild;HTNode,*HuffmanTree; /*动态分配数组存贮哈夫曼树*/typedef structchar ch;char *chs;HuffmanCode;typedef structchar ch;int weight;sw;typedef struct /*哈夫曼树结构体*/HuffmanTree HT;HuffmanCode *HC;huf;/*从HTi-1选择parent为零且weight最小的两个节点,分别编号为n1,n2.*/void select(HTNode * HT,int n,int *n1,int *n2) int i=1; int n3; while(HTi.parent!=0) i+; *n1=i; i+; while(HTi.parent!=0) i+;*n2=i; if(HT*n1.weightHT*n2.weight) n3=*n1;*n1=*n2;*n2=n3; for(i+;i=n;i+) if(HTi.parent=0) if(HTi.weightHT*n1.weight)*n1=i;else if(HTi.weight0),构造哈夫曼树HT,并求出n个字符的哈夫曼编码HC.*/int m,i,s1,s2,start,c,f; HuffmanTree p; char *cd; if(n=1) return 0;m=2*n-1;HT=(HuffmanTree)malloc(m+1)*sizeof(HTNode);for(p=HT+1,i=1;iweight=w-weight;p-ch=w-ch;p-parent=0;p-lchild=0;p-rchild=0;for(;iweight=0;p-ch=;p-parent=0;p-lchild=0;p-rchild=0;for(i=n+1;i=m;i+) /*建立哈夫曼树*/select(HT,i-1,&s1,&s2); HTs1.parent=i;HTs2.parent=i; HTi.lchild=s1;HTi.rchild=s2; HTi.weight=HTs1.weight+HTs2.weight;HC=(HuffmanCode *)malloc(n+1)*sizeof(char); /*为哈夫曼编码审请空间*/cd=(char *)malloc(n*sizeof(char);cdn-1=0;for(i=1;iHT=HT;HUF-HC=HC;return HUF;char *convert(char *chars,char *chars1,HuffmanCode *hc,int n) char *p=chars; int i; while(*p) i=1; while(hci.ch!=*p&i=n) i+; strcat(chars1,hci.chs); p+; printf(the chars translate are:%sn,chars1); return chars1;/*译码*/void transcode(HuffmanTree ht,char *chars2,char*chars3) int i=1,p; char *q=chars2; char *r=chars3; while(hti.parent!=0) i+; p=i; while(*q) while(htp.lchild!=0 & *q) if(*q=0) p=htp.lchild; else p=htp.rchild; q+; if(htp.lchild=0) *r=htp.ch;r+; p=i; *r=0; printf(the chars are:); /*打印出译码后的字符*/ puts(chars3); void input(int *n,sw *w)int i;printf(input the mount of char:); /*输入要编码的字符数量*/scanf(%d,n);for(i=1;ich,&w-weight); /*输入字符和权值*/ void main()HTNode HT;HuffmanCode HC,*hc;HuffmanTree ht;huf *HUF,huf2;int n;sw w40;char ch,inchar500,outchar1000; char *abc; char *p=inchar;input(&n,w);HUF=HuffmanCoding(&HT,&HC,w,n,&huf2);printf(input chars to translate:);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年版社会工作者(初)《社会工作实务》考试题库带答案解析
- 2026年设备监理师之设备监理合同考试题库带答案(综合题)
- 2025湖南省社会科学院(湖南省人民政府发展研究中心)第二批高层次人才招聘3人备考题库带答案解析
- 长沙市雨花区社区工作者考试题库及答案解析(夺冠)
- 2025新疆丰达棉业科技有限责任公司招聘2人笔试模拟试卷附答案解析
- 2025安徽宿州市砀山县中医医院招聘编外工作人员9人参考题库附答案解析
- 2026云南省普洱市青年人才专项招引31人笔试备考试卷附答案解析
- 2026年陕西省选调生招录(面向北京师范大学)历年真题库带答案解析
- 2026陕西省选调生招录考试已发布备考公基题库带答案解析
- 2025年六安市裕安区消防救援局政府专职消防员招聘12人笔试备考试卷附答案解析
- 《室外排水设计规范》课件
- 《美容皮肤治疗技术》课程标准
- 砂石料加工合同
- GB/T 15843.2-2024网络安全技术实体鉴别第2部分:采用鉴别式加密的机制
- 房地产项目营销策划与执行方案
- 2024年湖北省武汉市汉阳区数学六年级第一学期期末学业质量监测试题含解析
- 鲁迅《风波》教学课件
- AC-20C沥青混合料生产配合比以及配合比的验证报告
- 延长石油6S管理制度宣贯12.8
- (正式版)HGT 6285-2024 甲基丙烯醛氧化制甲基丙烯酸催化剂活性试验方法
- 临床医学导论习题与答案2
评论
0/150
提交评论