\r“转换”部分大可不必去通过遍历Haffman树来找到每个字符对应的哈夫曼编码,可\r以将每个Haffman码值及其对应的ascii码存放于结构体中:\rcodeList的创建算法,采用先序遍历的方式进行创建,并且利用递归调用。流程图如\r输出”部分是最重要的部分,也是最易出错的部分。\r这里,涉及到c语言的位操作,要求这个算法能处理好以下儿个问题:\ra)每个字符所对应的haffCode的比特位长度由5-23位不等长,不可少输,\r多输,输错任何一位,后一个字符的haffCode要紧跟在前一个字符的haffCode后\r面。\rb)最后一个字符要能合理的结束。这主要是为解压缩考虑的,比如,在最后\r一个要输出的haffCode的最后一位,它恰好是位于最后一个有效字符的第一位,剩\r下的七个比特位是要用无效的haffCode加以填充的。否则,如果填充的haffCode\r亦为某个ascii字符的haffCode时,那么在解压缩时,则该在原被压缩文件中不存\r在的字符便会无中生有的在解压后的文件中出现,这显然是不正确的,应在程序中\r加以处理。\r编码部分的流程下图所示:\r输出字符到压\r缩文件\r(3)main。主函数:\r通过实验更好的掌握了哈夫曼树,并对哈夫曼树有了深一步的了解。\r本程序将字符出现的频率(即权值)放在key.txt文件中,然后将这些\r权值读取出来保存到一个数组中,然后再根据此数组构造Huffman树,得\r出各字符的Huffman编码值,所以如果没有此key.txt文件,压缩就不会\r成功。压缩过程中,是对ascii码进行一一对应的转换,没有丢失原文件\r的信息,是无损压缩。在解压缩压缩后的文件时,文件类型变为*」er格\r式,用其他软件都不能打开,必须有key.txt文件,所以本程序除了可以\r对文件压缩之外还可以用来对*.txt文件进行加密。