当前位置:首页 > 哈夫曼编码译码器系统
目录
一、系统开发的背景.......................................................................................................(1) 二、系统分析与设计.......................................................................................................(1) 三、系统的设计与实现...................................................................................................(2) (一)设计初始化(Initialization).......................................................................(2) (二)设计编码(Encoding).......................................................................................(3) (三)设计译码(Decoding).......................................................................................(3) (四)设计印代码文件(Print).................................................................................(4) (五)设计印哈夫曼树(TreePrinting)...................................................................(4) 四、系统测试...................................................................................................................(5) (一)测试main函数.....................................................................................................(5) (二)测试编码(Encoding)及译码(Decoding)函数............................................(5) (三)测试印代码文件(Print)函数..........................................................................(6) (四)测试相关的根目录................................................................................................(6) 五、总结............................................................................................................................(6) 六、附件(代码、部分图表)........................................................................................(7)
哈夫曼编/译码器系统
一、系统开发的背景
为了提高信道利用率,缩短信息传输时间,降低传输成本,且在信息发送端通过一个编码系统对待传数据预先编码,在信息接收端将传来的数据进行译码(复原),因此设计哈夫曼编码/译码器系统。
二、系统分析与设计
(一)系统功能要求:
【任务要求】
I:初始化(Initialization)。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree中。
E:编码(Encoding)。利用以建好的哈夫曼树(如不在内存,则从文件hfmTree中读入),对文件To Be Tran中的正文进行编码,然后将结果存入文件CodeFile中。
D:译码(Decoding)。利用已建好的哈夫曼树将文件Code File中的代码进行译码,结果存入文件Text File中。
P:印代码文件(Print)。将文件Code File以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件Code Prin中。
T:印哈夫曼树(Tree Printing)。将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件Tree Print中。 【测试数据】
利用教科书中的数据调试程序。
用下表给出的字符集和频度的实际统计数据建立哈夫曼树,并实现以下报文的编码和译码:“THIS PROGRAM IS MY FAVORITE”。
字符 频度 字符 频度 A B C D E F G H I J K 5 Y L M 186 64 13 22 32 N 57 O P Q R 48 103 21 15 47 57 1 S 51 T U V W X 32 20 Z 63 15 1 80 23 8 18 1 16 1
(二)系统模块结构设计
通过对系统功能的分析,哈夫曼编码/译码器系统功能如图1所示。
哈夫曼编码/译码器系统
初 编 译 印
始 代
化 码 码 码
文
件
图1 哈夫曼编码/译码器系统功能图
印 哈 夫 曼 树 通过上图的功能分析,把整个系统划分为5个模块:
1、初始化(Initialization),该模块主要实现:初始化要编辑的语句,然后语句里面有个调用输入编码的语句 len=InputCode(); 2、编码(Encoding),该模块主要实现:void Encoding(); 3、译码(Incoding),该模块主要实现: void Decoding();
4、印代码文件(Print),该模块主要实现:由函数
void Code_printing()
和函数void Code_printing1()实现。
5、印哈夫曼树(TreePrinting),该模块主要实现: coprint(p,HT);
三、系统的设计与实现
(一) 初始化(Initialization),该模块主要实现
void Initialization()
{ int a,k,flag,len; a=0;
len=InputCode(); for(i=0;i cou[i-a].data=str[i]; cou[i-a].count=1; while(i>k) { if(str[i]==str[k]) { a++; flag=0; } k++; if(flag==0) break; } if(flag) { for(j=i+1;j n=len-a; for(i=0;i printf(\ printf(\ } for(i=0;i<=n;i++) { *(z+i)=cou[i].data; *(w+i)=cou[i].count; }
共分享92篇相关文档