哈夫曼编码译码器系统Word文档下载推荐.docx
- 文档编号:13844294
- 上传时间:2022-10-14
- 格式:DOCX
- 页数:21
- 大小:58.54KB
哈夫曼编码译码器系统Word文档下载推荐.docx
《哈夫曼编码译码器系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《哈夫曼编码译码器系统Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。
【任务要求】
I:
初始化(Initialization)。
从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree中。
E:
编码(Encoding)。
利用以建好的哈夫曼树(如不在内存,则从文件hfmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。
D:
译码(Decoding)。
利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,结果存入文件TextFile中。
P:
印代码文件(Print)。
将文件CodeFile以紧凑格式显示在终端上,每行50个代码。
同时将此字符形式的编码文件写入文件CodePrin中。
T:
印哈夫曼树(TreePrinting)。
将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint中。
【测试数据】
利用教科书中的数据调试程序。
用下表给出的字符集和频度的实际统计数据建立哈夫曼树,并实现以下报文的编码和译码:
“THISPROGRAMISMYFAVORITE”。
字符
A
B
C
D
E
F
G
H
I
J
K
L
M
频度
186
64
13
22
32
103
21
15
47
57
1
5
20
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
63
48
51
80
23
8
18
16
(二)系统模块结构设计
通过对系统功能的分析,哈夫曼编码/译码器系统功能如图1所示。
编
码
印
代
文
件
哈
夫
曼
树
哈夫曼编码/译码器系统
初
始
化
译
图1哈夫曼编码/译码器系统功能图
通过上图的功能分析,把整个系统划分为5个模块:
1、初始化(Initialization),该模块主要实现:
初始化要编辑的语句,然后语句里面有个调用输入编码的语句len=InputCode();
2、编码(Encoding),该模块主要实现:
voidEncoding();
3、译码(Incoding),该模块主要实现:
voidDecoding();
4、印代码文件(Print),该模块主要实现:
由函数voidCode_printing()和函数voidCode_printing1()实现。
5、印哈夫曼树(TreePrinting),该模块主要实现:
coprint(p,HT);
三、系统的设计与实现
(一)初始化(Initialization),该模块主要实现
voidInitialization()
{inta,k,flag,len;
a=0;
len=InputCode();
for(i=0;
i<
len;
i++)
{k=0;
flag=1;
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<
j++)
{if(str[i]==str[j])
++cou[i-a].count;
}
n=len-a;
n;
i++)
printf("
%d%d"
i,cou[i].data);
%d%d\n"
i,cou[i].count);
=n;
*(z+i)=cou[i].data;
*(w+i)=cou[i].count;
(二)编码(Encoding),该模块主要实现
voidEncoding()
{
char*tran;
i=99;
tran=(char*)malloc(100*sizeof(char));
while(i==99)
if(fgets(tran,100,tobetran)==NULL)
printf("
不能打开文件\n"
);
break;
*(tran+i)!
='
\0'
;
for(j=0;
if(*(z+j-1)==*(tran+i))
fputs(HC[j],codefile);
if(j>
n)
字符错误,无法编码!
\n"
(三)译码(Decoding),该模块主要实现
voidDecoding()
{char*work,*work2,i2;
inti4=0,i,i3;
unsignedlonglength=10000;
work=(char*)malloc(length*sizeof(char));
fgets(work,length,codef);
work2=(char*)malloc(length*sizeof(char));
i3=2*n-1;
for(i=0;
*(work+i-1)!
i2=*(work+i);
if(HT[i3].lchild==0)
{*(work2+i4)=*(z+i3-1);
i4++;
i--;
elseif(i2=='
0'
)
i3=HT[i3].lchild;
elseif(i2=='
1'
)
i3=HT[i3].rchild;
(四)印代码文件(Print),该模块主要实现
voidCode_printing1()
{char*work5;
work5=(char*)malloc(51*sizeof(char));
do
if(fgets(work5,51,txtfile)==NULL)
不能读取文件\n"
fputs(work5,CodePrin1);
puts(work5);
}while(strlen(work5)==50);
free(work5);
(五)印哈夫曼树(TreePrinting),该模块主要实现
voidTree_printing(HuffmanTreeHT,intw)
HuffmanTreep;
p=HT+w;
printf("
下面打印哈夫曼树\n"
打印工作结束\n"
四、系统测试
(一)测试main函数
(二)测试编码(Encoding)及译码(Decoding)函数
.
(二)测试印代码文件(Print)函数
(四)相关的根目录
五、总结
系统完成的功能:
本程序完成的功能是可以在信息发送端通过一个编码系统对待传数据预先编码,在信息
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 哈夫曼 编码 译码器 系统