全球旧事资料 分类
应当扩展开去学习。4、思考改进:1.用数组处理字符串造成了一定的空间的浪费,后续应考虑采取其他方式处理字符串。2.程序中对数据进行了大量的扫描和遍历,当数据量很大的时候,时间复杂度将很高,应该考虑改进哈弗曼编码。网上应该有类似的优化的哈弗曼算法,应学习和借鉴。
8、参考文献:
1、《数据结构(C语言版),严蔚敏,清华大学出版社》2、《cprimer》,人民邮电出版社
9、源程序代码:
i
cludeiostreamhi
cludeioma
iph
9
fi
cludestri
ghi
cludemallochi
cludestdioh
typedefi
t
TElemType
co
sti
tUINT_MAX1000charstr50
typedefstructi
tweightKi
tpare
tlchildrchildHTNodeHuffma
Tree
typedefcharHuffma
Code
全局变量Huffma
TreeHTHuffma
CodeHCi
tw50ij
charz50i
tflag0
10
fi
t
umb0
求赫夫曼编码structcouchardatai
tcou
tcou50
i
tmi
Huffma
Treeti
ti函数voidselect调用i
tjflagi
tkUINT_MAX取k为不小于可能的值即k为最大的权值1000forj1jijiftjweightktjpare
t0ktjweightflagjtflagpare
t1retur
flag
slect函数voidselectHuffma
Treeti
tii
ts1i
ts2
11
fs1为最小的两个值中序号小的那个i
tjs1mi
tis2mi
tiifs1s2js1s1s2s2j算法612voidHuffma
Codi
gHuffma
TreeHTHuffma
CodeHCi
twi
t
w存放
个字符的权值均0构造赫夫曼树HT并求出
个字符的赫夫曼编码HCi
tmis1s2startu
sig
edcfi
tcfHuffma
Treepcharcdif
1
12
fretur
检测结点数是否可以构成树m2
1HTHuffma
Treemallocm1sizeofHTNode0号单元未用forpHT1i1i
ipwpweightwppare
t0plchild0prchild0forimipppare
t0fori
1imi建赫夫曼树在HT1i1中选择pare
t为0且weight最小的两个结点其序号分别为s1和s2selectHTi1s1s2HTs1pare
tHTs2pare
tiHTilchilds1HTirchilds2HTiweightHTs1weightHTs2weight
13
f从叶子到根逆向求每个字符的赫夫曼编码HCHuffma
Codemalloc
1sizeofchar分配
个字符编码的头指针向量0不用cdcharmalloc
sizeofchar分配求编码的工作空间cd
10编码结束符fori1i
i逐个字符求赫夫曼编码start
1编码结束符位置forcifHTipare
tf0cffHTfpare
t从叶子到根逆向求编码ifHTflchildccdstart0elsecdstart1
HCicharmalloc
startsizeofchar为第i个字符编码分配空间strcpyHCr
好听全球资料 返回顶部