2023年数据结构哈夫曼编码实验报告.docx
《2023年数据结构哈夫曼编码实验报告.docx》由会员分享,可在线阅读,更多相关《2023年数据结构哈夫曼编码实验报告.docx(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构实验报告一一实验五简朴哈夫曼编/译码的设计与实现本实验的目的是通过对简朴哈夫曼编/译码系统的设计与实现来纯熟掌握树型结构在实际问题中的应用。此实验可以作为综合实验,阶段性实验时可以选择其中的几 个功能来设计和实现。一、【问题描述】。运用哈夫曼编码进行通信可以大大提高信道运用率,缩短信息传输时间,减少传输成本。但 是,这规定在发送端通过一个编码系统对待传数据预先编码,在接受端将传来的数据进行译码, 此实验即设计这样的一个简朴编/码系统。系统应当具有如下的几个功能:1、接受原始数据。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文献n o de d a ta.da
2、 t 中。2、编码。运用已建好的哈夫曼树(如不在内存,则从文献nod e da t a .dal中读入),对文献中的 正文进行编码,然后将结果存入文献co de.dat中。3、译码。运用已建好的哈夫夏树将文献code.dal中的代码进行译码,结果存入文献lexlfile.dat 中。4、打印编码规则。即字符与编码的一一相应关系。二、【数据结构设计】。1、构造哈夫曼树时使用静态链表作为哈夫曼树的存偌。在构造哈夫曼树时,设计一个结构体数组HuffN o de保存哈夫曼树中各结点的信息,根据二 又树的性质可知,具有n个叶子结点的哈夫曼树共有2n-l个结点,所以数组Huf fNode 的大小设立为2n
3、-l,描述结点的数据类型为:t yp e def st r u c I for(j=H a ffCo d e i .start+l;jn; j+)00outf i lei. write (char* )& Ha f fC o dei .bitj,size o f(Ha f fCo d ei.bit j );。8。cou tHa f f C o de i .bi t j;0 ) c out e ndl;。co utV”编译后的代码串已经存入co de. da t文献中! Vendl;couten d 1;outfile 1. clos e ();dele t e H a ffNo d e ;de
4、lete HaffC o de;1void decode( int &n) /解码(in t i ;HNod e Ty p e *11 affNod e =ne w IINodeType2 * n-1 ;fstr e am i n file 1 ;oi n filel. o p en ( E: n o ded a ta.dat ,io s :in| i os:: bi n ary);/读出哈夫 曼树oi f (!infi 1 e 1 )c o ut * nodedat a . d a t 文献不能打开V V e n d 1;g a b o rt();。of o r(i= 0 ; i 2*n l
5、;i+)n f i le 1 .read(char*)&HaffNod e i ,sizeof(HNo d eTy p e );A n filel. c lose();i nt lem p c ode 1 0 0 ;in t num=0;for(i=0; i 100;i+)tempo o de i =-l;0H c odeT y pe *C o d e=new HcodeTypen;f st r e a m i nf i le2;读编码o i n file2.open(E: Wcode.dat, ios: i n|i o s :: binary);while(!infil e 2. e of(
6、)infi 1 e 2. r ead( char *)& t empco d e num, s i zeof(tempcode n u m);oonum+;i n file2.close();叫 u m;。c o u从文献中读出的编码为 endl;for (i= 0 ;inum; i +) couttempcodei ;coutend 1 ;int m=2*n-2;i= 0 ;c o u ten d 1 ;co u K 译码后为: e ndl;f s tr e am out file;out file.open ( E :textfile.tx t H,io s :: out);i f (!
7、o utf i 1 e)(cout tex tfilc.txt 文献不能打开!VVendl;a b or t ();)w h ile ( i n u m) / /小于字符串的长度(while (HaffNo d em. 1 c h il d ! = _1 &HaffNodem.r c h i Id !=-l)0 (if(tempcod e f i =0)o am=Ha f fN o d em .1c h il d ;oooa i +;。 )。 el s e if (temp c od e i= 1 )(om=Haf f Nodem. r c h i 1 d;i+ + ;c outHa f fN
8、od e m . i n f;o utfileHaf f Nodem.inf;0m=2* n -2;)c o u t endl;outfi 1 e. c 1 ose();c outV”译码后的结果已经存入textfi 1 e.t x t中!”Vend 1 ; delete Ha f fNo d e;i n t ma i n ()in t n;co u t * * * * 欢迎进入编/译码系统!*火* * * * * *cnd 1 ;i n t ch 1 ;do0COU t 1.建树” vvendl;cout cout 2:编码,并显示字符和相应的编码 V e ndl;C 0 utC 0 ut3
9、:译码 H endl;cou t 0:退出 vendl;c o utn* * * * * * * * * * * * * * * * *ch1 ;whi 1 e(!( c h 1 =0) 输入不在0到4之间无效 (。 coutVV”数据输入错误,请重新选择(04) :*;。 c in chi;00 switc h (ch 1 )(。ca s e 1 :08。cou t V” t ll请输入编码个数“ V endl ;/叶子结点个数。o ci n n;C r e a t _Ha f fmantre e ( n );break;)。case 2: Haf f Co d e(n); bre a k;
10、case 3: d ecode(n); break; wh i 1 e (chi!=0)ore t u r n 0; )五、【运营与测试】1、令叶子结点个数n为4,权值集合为1, 3,5, 7,字符集合为A,B, C, D,并有 如下相应关系,A1、B3, C5,D7 ,调用初始化功能模块可以对的接受这些数据。2、调用建立哈夫曼树的功能模块,构造静态链表HuffNode的存储。3、调用建立哈夫曼编码的功能模块,在屏幕上显示如下相应关系:A1 1 I B110、C10、D0。4、调用译码的功能模块,输入代码串”后,屏幕上显示译码结果:0A BCDint we i g ht;/结点权值int pa
11、r e nt;in 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序列,因 此先得到的分支代码为所求编码的低位码,后得到的分支代码位所求编码的高位码,所以设计 如下数据类型:#define MAXBIT 1 0ty p e d
12、 ef struct(oint b i tMA X BITJ;aint st a rt;Hc o dcTy p c;03、文献 nod e data.dat、c o d e .da t 和 text f il e . date三、【功能(函数)设计】1、初始化功能模块。此功能模块的功能为从键盘接受字符集大小n,以及n个字符和n个权值。2、建立哈夫曼树的功能模块。此模块功能为使用1中得到的数据按照教材中的构造哈夫曼树的算法构造哈夫曼树,即 将HuffNode数组中的各个位置的各个域都添上相关的值,并将这个结构体数组存于文献hfmtree.d a t 中。3、建立哈夫曼编码的功能模块。此模块功能为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 数据结构 哈夫曼 编码 实验 报告
限制150内