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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

哈夫曼编码报告.docx

1、哈夫曼编码报告实验项目:哈夫曼编码1问题描述:利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这 要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(解码)。对于双 工信道(即可以双向传输信息的信道),每端都需要一个完整的编 /译码系统。试为这样的信息收发站设计一个哈夫曼编/译码系统。2 .一个完整的系统应具有以下功能:1 )初始化(Initialzation )。读入字符及每个字符的权值,建立哈夫曼树 HuffTree ;2 )编码(EnCoding )。用已建好的哈夫曼树,对输入的文本进行编码形成报文,将报文显示出来;3) 译码

2、(Decoding )。利用已建好的哈夫曼树,对输入的代码进行解码形成原文,并将结果显示;4) 输出(Output ):输出出现的字符以及各字符出现的频度(或概率);输出各个字符的编码, 输出代码译出的原文;3. 实验目的:理解哈夫曼树的特征及其应用; 在对哈夫曼树进行理解的基础上, 构造哈夫曼树,并用构造的哈夫曼树进行编码和译码;通过该实验,使学生对数据结构的应用有更深层次的理解。4. 实验条件 :学院提供公共机房,1台/学生微型计算机。5.实验步骤(含实验代码)第i次:完成程序的主框架设计,进行调试,验证其正确性;第2次:详细设计,进行调试,验证其正确性;第3次:进行整体调试,运行程序,对

3、运行结果进行分析,完成实验报告#i nclude#i nclude#i nclude#defi ne MAXWORD 100typedef struct un sig ned int weight;char data;un sig ned int pare nt,llchild,rrchild;HTNode,*HuffmanTree;/ 动态分配数组存储哈夫曼树typedef char * *HuffmanCode;/ / 动态分配数组存储哈夫曼编码/ 字符typedef struct tnode char ch;struct tnode *lchild,*rchild;BTree,*BT;i

4、nt a=0,b=0;int sMAXWORD;char strMAXWORD;void main() int n;int i=0;HuffmanTree HT;HuffmanCode HC;void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int n);void DispHCode(HuffmanTree HT,HuffmanCode HC,int n);void Creatree(BT &p,char c); /Creatree() 和InOrderTraverse()void InOrderTraverse(BT p); / 利用二叉树

5、统计出现的字符及 个数 void TTranChar(HuffmanTree HT,HuffmanCode HC,int n);void Tran(HuffmanTree HT,int n); printf( 请输入要用几种字符: ); scanf(%d,&n);BT root=NULL;printf(n);printf( 请输入字符串 :n); scanf(%s,str);while(stri!=0)Creatree(root,stri);i+;printf( 字符及出现次数 :n);InOrderTraverse(root);printf(n);HuffmanCoding(HT,HC,n)

6、;DispHCode(HT,HC,n);Tran(HT,n);TTranChar(HT,HC,n);void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int n) / w 放 n 个权值 , 构造赫夫曼树 HT,n 个字符编码 HCvoid select(HuffmanTree t,int i,int &s1,int &s2);int m,i,s1,s2,start;char *cd;unsigned c,f;HuffmanTree p;if(n=1) return;m=2*n-1;HT=(HuffmanTree)malloc(m+1)*si

7、zeof(HTNode);for(p=HT+1,i=1;i=n;+i,+p) (*p).parent=0;(*p).llchild=0;(*p).rrchild=0;for(p=HT+1,i=0;in;+i,+p) (*p).data=stri;(*p).weight=si;for(;i=m;+i,+p)(*p).parent=0;for(i=n+1;i=m;+i) / 建赫夫曼树 / 在 HT1i-1 中选择 parent 为 0 且 weight s2select(HT,i-1,s1,s2);HTs1.parent=HTs2.parent=i;HTi.llchild=s1;HTi.rrch

8、ild=s2;HTi.weight=HTs1.weight+HTs2.weight;HC=(HuffmanCode)malloc(n+1)*sizeof(char*);/(0cd=(char*)malloc(n*sizeof(char);cdn-1=0; /for(i=1;is2)j=s1;s1=s2;s2=j;int min(HuffmanTree t,int i)int j,flag;unsigned int k=100;for(j=1;j=i;j+)if(tj.weightch=c;p-count=1;p-lchild=p-rchild=NULL;elseif(c=p-ch) p-cou

9、nt+;elseif(cch) Creatree(p-lchild,c);else Creatree(p-rchild,c);void InOrderTraverse(BT p) / 中序遍历if(p!=NULL) InOrderTraverse(p-lchild);printf(%c 的个数为 :%dn,p-ch,p-count);sb=p-count;b+;stra=p-ch;a+;InOrderTraverse(p-rchild);/ 显示 0 、void DispHCode(HuffmanTree HT,HuffmanCode HC,int n)1 编码int i;printf( 输出

10、哈夫曼编码 :n);for(i=1;i=n;i+) printf(%c:t,HTi.data);puts(HCi);1 的编码翻译成字符void Tran(HuffmanTree HT,int n) / 将含 0 、 int i,j=0;char ccMAXWORD;i=2*n-1;printf( 输入发送的(0 、1)编码(以#为结束标志 ):);scanf(%s,cc);printf( 译码后的字符为 );while(ccj!=#)if(ccj=0)i=HTi.llchild;elsei=HTi.rrchild;if(HTi.llchild=0)printf(%c,HTi.data);i=

11、2*n-1; j+;printf(n);void TTranChar(HuffmanTree HT,HuffmanCode HC,int n)char ss50;int i,j;/ 将字符串翻译成 0、1 代码printf( 输入字符串 :);scanf(%s,ss);i=0;while(ssi!=0)j=1;while(HTj.data!=ssi)&(j=n)j+;printf(%s,HCj);i+;printf(n);6.实验结果与总结:時输入要用几种学符:4请输入宇符串:aafTfjjjjjjjbbbbb宇符及山现次数:且的个数为:2b的个数为:5f的个散为j的个数为:了输出哈夬昼編码:

12、a: 11O七: 10f : 11 1J: 0输入发:送的(0、1)编码(UT护 为结束标志);110101110010101111100 译码后的宁符为命f j jbbfaj 输入宇符串 jj00111111110100000011111100P170S召 匕门丫 to GQntinuE总结:在实现哈夫曼树编码的过程中,首先构建哈夫曼树,并用动态分配数组存储,也用动态分配数组存储哈夫曼编码表。程序书上虽然有一部分可借鉴的 代码,自己只需要编写几个函数即可, 但在编写程序时也遇到一些问题, 开始统 计字符串中出现的各种字符及其次数时, 将字母存放数组中,但是考虑到字母出 现的不同,完全初始化再统计其出现的个数,不仅占用空间并且时间复杂度高。后来采用二叉树统计出现的字母及个数, 实现了输入字母种类的灵活性。通过此 次实验,明白了了解数据存储的具体方式的重要性, 在这次实验中要实现两个互 译码程序,就需要对数据的存储了解,编写时就容易了然于心。总的来说,数据 结构实验对我们的编程能力还是有很大的帮助,锻炼我们的逻辑思维、使我们更 熟练地使用C语言编程、锻炼我们处理异常的能力

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

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