数据结构课程设计报告
数据结构课程设计报告
哈夫曼编码译码器
班级:姓名:学号:完成时间:
第1页
f数据结构课程设计报告
题目:哈夫曼编码译码器
【问题描述】利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对传输数据预先编码,在接收端将传来的数据进行译码。对于双工信道,每端都需要一个完整的编码译码系统。试为这样的通信端编写一个哈夫曼编码译码系统。【基本功能】一个完整的系统应具有以下功能:初始化:输入一串字符(正文),计算不同字符(包括空格)的数目一级每种字符出现的频
率(以该种字符出现的次数作为其出现频率),根据权值建立哈夫曼树,输出每一种字符的哈夫曼编码。编码:利用求出的哈夫曼编码,对该正文(字符串)进行编码,并输出。译码:对于得到的一串哈夫曼编码,利用已求得的哈夫曼编码进行译码,将译出的正文输出。【运行流程】
开始
初始化:1、输入正文2、统计字符出现次数并输出3、求出哈夫曼编码并输出
编码:发送方利用得到的哈夫曼编码对正文进行编码,输出密文
译码:接收方利用哈夫曼编码对密文进行译码,输出译后的字符串
是是否继续
否结束
第2页
f数据结构课程设计报告
源程序:
haffma
h
i
cludestri
gstructHaffNodei
tweightcharvaluei
tflagi
tpare
ti
tleftchildi
trightchildstructCodecharbitMAXNcharvaluei
tstarti
tweight
哈夫曼的结点结构存放哈夫曼编码的数据元素结构
voidHaffma
i
tweighti
t
HaffNodehafftreecharstr2构造哈夫曼树
i
tjm1m2x1x2
m1m2是左右孩子的weightx1x2是左右孩子的
仿真指针
fori
ti0i2
1i哈弗曼树的初始化,也就是将所有节点列出来,
一边下面将他们一个一个构建入哈夫曼数中
ifi
hafftreeiweightweighti
hafftreeivaluestr2i
elsehafftreeiweight0
hafftreeiflag0
hafftreeipare
t0
hafftreeileftchild1
hafftreeirightchild1
fori0i
1i构造
1个非叶节点,循环一次构造一个非叶节点
m1m2MaxValue
第3页
f数据结构课程设计报告
x1x20forj0j
ijifhafftreejweightm1hafftreejflag0
m2m1使得m1得到的比m2小x2x1m1hafftreejweightx1jelseifhafftreejweightm2hafftreejflag0m2hafftreejweightx2jhafftreex1pare
t
ihafftreex2pare
t
ihafftreex1flag1hafftreex2flag1hafftree
iweighthafftreex1weighthafftreex2weighthafftree
ileftchildx1hafftree
irightchildx2
voidbia
maHaffNor