2023年数据结构哈夫曼编码实验报告.pdf
《2023年数据结构哈夫曼编码实验报告.pdf》由会员分享,可在线阅读,更多相关《2023年数据结构哈夫曼编码实验报告.pdf(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构实验报告一 一 实验五 简朴哈夫曼编/译码的设计与实现本实验的目的是通过对简朴哈夫曼编/译码系统的设计与实现来纯熟掌握树型结构在实际问题中的应用。此实验可以作为综合实验,阶段性实验时可以选择其中的几个功能来设计和实现。一、【问题描述】。运用哈夫曼编码进行通信可以大大提高信道运用率,缩短信息传输时间,减少传输成本。但是,这规定在发送端通过一个编码系统对待传数据预先编码,在接受端将传来的数据进行译码,此实验即设计这样的一个简朴编/码系统。系统应当具有如下的几个功能:1、接受原始数据。从终端读入字符集大小n,以及n 个字符和n 个权值,建立哈夫曼树,并将它存于文献n o ded a ta.d
2、a t 中。2、编码。运用已建好的哈夫曼树(如不在内存,则从文献nod e da t a.dat中读入),对文献中的正文进行编码,然后将结果存入文献code.dal中。3、译码。运用已建好的哈夫曼树将文献code.dat中的代码进行译码,结果存入文献textfile.dat中。4、打印编码规则。即字符与编码的一一相应关系。二、【数据结构设计】。1、构造哈夫曼树时使用静态链表作为哈夫曼树的存储。在构造哈夫曼树时,设计一个结构体数组HuffN o d e 保存哈夫曼树中各结点的信息,根据二叉树的性质可知,具有n 个叶子结点的哈夫曼树共有2n-l个结点,所以数组H u f fN ode的大小设立为2
3、 n-l,描述结点的数据类型为:t yp e def st r u c tint we i g ht;/结点权值int par e nt;“n t 1 c h i Id;“n t r c hild;c har inf;H N o d eT y pe;2、求哈夫曼编码时使用一维结构数组HuffCode作为哈夫曼编码信息的存储。求哈夫曼编码,实质上就是在己建立的哈夫曼树中,从叶子结点开始,沿结点的双亲链域回退到根结点,没回退一步,就走过了哈夫曼树的一个分支,从而得到一位哈夫曼码值,由于一个字符的哈夫曼编码是从根结点到相应叶子结点所通过的途径上各分支所组成的0、1序列,因此先得到的分支代码为所求编码
4、的低位码,后得到的分支代码位所求编码的高位码,所 以设计如下数据类型:#define MAXBIT 1 0ty p e d ef struct(ointb i tMA X BIT;“nt st a rt;Hc o deTy p e;03、文献 nod e data.dat、c o d e.da t 和 text f il e.date三、【功能(函数)设计】1、初始化功能模块。此功能模块的功能为从键盘接受字符集大小n,以及n个字符和n个权值。2、建立哈夫曼树的功能模块。此模块功能为使用1中得到的数据按照教材中的构造哈夫曼树的算法构造哈夫曼树,即将 HuffNode数组中的各个位置的各个域都添上
5、相关的值,并将这个结构体数组存于文献hfmtree.d a t 中。3、建立哈夫曼编码的功能模块。此模块功能为从文献n oded a t a.d a t 中读入相关的字符信息进行哈夫曼编码,然后将结果存入c ode.d a t 中,同时将字符与0、1 代码串的一一相应关系打印到屏幕上。4、译码的功能模块。此模块功能为接受需要译码的0、1 代码串,按照3 中建立的编码规则将其翻译成字符集中字符所组成的字符串形式,存入文献t e x tf i le.d a t,同时将翻译的结果在屏幕上打印输出。四、【编码实现】#in c 1 ude#i n clude#i n cl u d e#i n c 1 u
6、 de#define Ma xBit 10#de f ine Ma x valu e 10 0/应当大于权重之和#d e fine Maxie a f 1 00#d e fi n e M a xnode Maxlea f*2 1typ e def s t r u ct(i n t weig h t;in t pa r ent;6int Ich i Id;in t rch i Id;c h a ri nf;HN o deTyp e;s t ruct HcodeT y p e(“n t bitM a xB it;。i n t s tart;);v o id Creat_H af f ma n t
7、r ee(i nt&n)(HNodeT ype*HaffNod e=new HNod e T y pe2*n-l;int i,j;A n t m l,m2,x 1 ,x2;f o r (i=0;i 2*n 1;i+)oH a fTNod e i.we i g h t=0;Haf f Nodei.p are n t=-l;HaffNodei.Ich i ld=1;-Haf f N ode i.rchild=-l;ooHaf f N ode i.inf=O;)f o r(i=0;i vn;i+)o o c ou t ”请输入字符H e nd 1 ;sei n HaffNode i.inf;ocou
8、t”请输入该字符的权值”en d 1 ;。cinHa f f Node i.w e ig h t;f or(i=O;in-l;i+)/构造哈夫曼树6ml=m2=Max va 1 ue;xl=x 2=0;8for(j=0;jn+i;j+)选取最小和次小(bi f(Haf f No d efjl.p a ren t=-l&Haf f Nodej.we i ghtml)m2=m 1;。x2=x 1;0m l=Ha f fN o dej.we i gh t;)g e Iseg g if(H a ffNodej.par e nt=-l&HaffNo d ej.w ei g h t m 2)b e。m2=
9、HaffNode L j.w e i ght;8 8X 2=j;)b 0。将找出的最小和次小合并,发明其父母结点oHaifNode xl.par e nt=n+i;。HaffN o d e Ex2.par e nt=n+i;oHaf f N o d e n+i.we i g h t=H a ffNod e xl.w e ight+H a f fN odex2.wei g ht;Ha f fNode n+i.Ich i 1 d=x 1;。HaffNoden+i.rch i ld=x2;HaffNode n+i.inf=N U LL;o ut显示存储的哈弗曼树信息:endl;c out 权值左孩子
10、右孩子双亲V Vend 1 ;f o r(i=0;i2*n-1;i+)c ou t H a ffNodei.we i ght ;c o u t HaffN o dei.lch i ld;c outHaffN o dei.rchild。co u tHaffNo d ei.pa r e nto c o utH a f fNo d e i .i n fendl;e)。写入文献ofstr e a m o u t f il e 1;out f i 1 el.ope n(E:nod e data,d a t,ios:out|ios:t r un c|i os:binary)“/建立进行写入的文献。i f(
11、!o utf i lei)/没有创建成功则显示相应信息 c o u t nodedata.dat 文献不能打开end 1 ;“abort。;ofo r(i=0;i 2*n-1;i+)/将内存中从 H a f f N o de口 地址开始的 sizeof(Ha ff N odei)的内容写入文献中so utfil e 1.write(ch ar*)&HaffNode i,s izeof(HaffNodei);o u t fil e 1 .cl o se();/关闭文献。d elete ClHaffN o de;)void HaffCode(i n t&n)哈夫曼编码(bHNo d eTy p e
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 数据结构 哈夫曼 编码 实验 报告
限制150内