哈夫曼编码解码报告.pdf

上传人:Q****o 文档编号:56619984 上传时间:2022-11-02 格式:PDF 页数:12 大小:283.09KB
返回 下载 相关 举报
哈夫曼编码解码报告.pdf_第1页
第1页 / 共12页
哈夫曼编码解码报告.pdf_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《哈夫曼编码解码报告.pdf》由会员分享,可在线阅读,更多相关《哈夫曼编码解码报告.pdf(12页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、目录一、设计思想.02 二、算法流程图.03 三、源代码.03 四、运行结果.09 五、遇到的问题及解决.11 六、心得体会.12 哈夫曼编码与解码的实现-1-一、设计思想哈夫曼的编码与解码:读取 txt 文件,统计所得到的文件中每个字母的权值,创建哈夫曼树,哈夫曼编码。哈夫曼解码,解码后内容写入到指定的txt 文件,让用户选择不同的操作。读取 txt 文件,里面的内容是由英文单词组成。读取文件的时候传入文件存放的路径、读取方式以及读出以后存放的数组,最终可以得到一个存放目标文件内容的数组。将得到的数组进行字母权值的统计,统计每个字母出现的次数,次数即为每个字母的权值,在这个函数里面统计26

2、个字母在目标文件中出现的次数,并且统计“逗号”、“句号”和“空格”的出现次数。使用的方法:每次从数组中取出一个字符,将字母的ASCII值与字母“a”相减,得到一个小于26 的数,将存放权值数组的对应位置进行+运算,特殊的三个符号另作统计,如此可以得到目标文件中每个字母出现的次数。然后将字母出现次数为零的字母去掉重新组成一个字符数组,在配上对应的权值数组,统计完成后将字符数组与权值数组作为结果返回。将得到的字符数组与权值数组作为创建哈夫曼树的依据,哈夫曼树根据每个字母权值的大小来创建,每个节点,包括权值、状态(是否已经在哈夫曼树上,0 代表不再哈夫曼树上,1 代表在哈夫曼树上)、父节点、左子、右

3、子和字母本身。假设有n 个字母,也即是叶子节点,哈夫曼树上的节点应该为2*n 1 个。前面的 n 个节点都有相应的字母,后面生成的n-1个节点是没有相应的字母的,用空字符替代。对每个节点进行初始化。初始化完成以后,开始创建哈夫曼树,每次选取两个权值最小的叶子节点组成一个新的节点,新的节点的左子设置为上面两个权值小的那个节点,右子为上面权值大的那个节点,权值为上面两个节点的权值的和,将上述选取出来的叶子节点标位设置为1,父节点为新创建出来的节点。将新的节点存放到原有的节点数组上,将已用过的节点从节点数组上去除。重复执行上述操作直到只剩下最后一个节点,完成哈夫曼树的创建。根据哈夫曼树进行编码,每次

4、都从叶子节点开始遍历,设置为当前节点,根据此节点的父节点的左子是此节点还是右子是此节点,记录相应的编码0 还是1,然后将此父节点设置为当前节点,重复上面的操作,直到当前节点不再具有父节点时得到该叶子节点的哈夫曼编码。将叶子节点用上面的方式进行编码,再用这些编码替换字母,从目标文件的数组中依次取出字母,将字母用相应的哈夫曼编码替代,存放到新的数组,执行完毕后,形成目标文件的哈夫曼编码,将此编码返回。根据哈夫曼树,将哈夫曼编码得到的0 和 1 的字符串译成原先内容。解码的时候每次都站在哈夫曼树的最上面一个节点上,然后从编码得到的数组中每次取出一个字符,在根据取出的字符是0还是 1决定是往该节点的左

5、子走还是右子走。重复执行上面的操作,直到遇到叶子节点为止。将对应的叶子节点存放的字母存入解码数组中,重新回到根节点上,再进行上述的操作直到编码数组结束为止。得到的数组即为解码数组,解码数组作为解码的结果返回。写入 txt 文件,将解码得到的数组、文件的完整路径以及文件的写方式作为参数传入,将数组写入到相应的文件中。给用户相应的选择,0 代表退出程序,1 代表编码操作,2 代表解码操作,每次根据用户的不同输入要求执行相应的功能。用一个循环来完成,当遇到0 的时候就不再进行下面的操作,否则就让用户重新输入想要执行的操作。文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5

6、S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V

7、10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E

8、3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5

9、G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I

10、5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V

11、3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3

12、U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9哈夫曼编码与解码的实现-2-二、算法流程图从文件中读取要进行编码的内容,创建哈夫曼数,哈夫曼编码解码。将解码得到的内容写入到指定的文件中。图 1 哈夫曼编码译码三、源代码下面给出的是哈夫曼编码解码算法实现程序的源代码:#include#include#include#define MaxValue 100#define MinValue 0

13、 typedef struct int flag;/节点的标志位,0 代表未存在哈夫曼树上,1 代表已存在int parent;/当前节点的父节点int leftChild;/当前节点的左子int rightChild;/当前节点的右子int weight;/当前节点的权值char ch;/当前节点代表的字母文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V

14、3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3

15、U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX

16、7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ

17、5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4

18、D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:

19、CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7

20、HQ5V3E3C5H2 ZB4D3U5G5S9哈夫曼编码与解码的实现-3-HaffTree;typedef char*HaffCode;/存放每个字母哈夫曼编码/从指定的文件中读取内容,并且存放到数组中void ReadFile(char path,char way,char array)FILE*fp;int i=0;/根据路径和打开方式打开指定的文件,判断操作是否成功if(fp=fopen(path,way)=NULL)printf(cant open the file);fgets(array,100,fp);/将文件的内容读入到字符数组中printf(%s,array);printf(

21、n);fclose(fp);/完成读取以后将文件关闭/获得每个字母对应的权值,并将存在的字母存为数组,且将对应的权值返回void GetWeight(char array,int letterWeight,char existLetters,int weight)int i,j=0,k=0,m,n=strlen(array);/n 代表 array 数组的长度for(i=0;i n;i+)m=arrayi-a;/计算当前字母与字符a 的 ASCII 差值switch(m)case-53:letterWeight26+;break;/如果差值为-53,则为逗号case-51:letterWeig

22、ht27+;break;/如果差值为-51,则为句号case-65:letterWeight28+;break;/如果差值为-65,则为空格default:letterWeightm+;/根据不同的差值,对应的字母权值加1 printf(tletterttweightn);for(i=0;i 29;i+)/取出文件中没有出现的字母 if(letterWeighti!=0)switch(i)case 26:existLettersj+=,;/若存在逗号,则存入数组weightk+=letterWeighti;printf(t,tt%dn,letterWeighti);break;case 27:

23、文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10

24、L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C

25、5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5

26、S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V

27、10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E

28、3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5

29、G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9哈夫曼编码与解码的实现-4-existLettersj+=.;/若存在句号,则存入数组weightk+=letterWeighti;printf(t.tt%dn,letterWeighti);break;case 28:existLettersj+=;/若存在空格

30、,则存入数组weightk+=letterWeighti;printf(t 空格 tt%dn,letterWeighti);break;default:existLettersj+=i+a;/一般情况还原字母存入weightk+=letterWeighti;printf(t%ctt%dn,i+a,letterWeighti);/根据每个字母的权值,创建哈夫曼树void CreateHaffTree(int weight,HaffTree haffTree,char ch)int i,j,x1,x2,m1,m2,n,k;n=strlen(ch);/计算字母数组的长度for(i=0;in*2-1;

31、i+)/为哈夫曼树的2*n-1 个节点初始化 if(in)/为 n 个叶子节点初始化 haffTreei.weight=weighti;haffTreei.flag=0;haffTreei.parent=-1;haffTreei.leftChild=-1;haffTreei.rightChild=-1;haffTreei.ch=chi;else/为 n-1 个非叶子节点初始化 haffTreei.weight=0;haffTreei.flag=0;haffTreei.parent=-1;haffTreei.leftChild=-1;haffTreei.rightChild=-1;haffTre

32、ei.ch=;for(i=0;in-1;i+)/构造哈夫曼树 x1=x2=MaxValue;文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7

33、I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5

34、V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D

35、3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:C

36、X7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 H

37、Q5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB

38、4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9哈夫曼编码与解码的实现-5-m1=m2=MinValue;/选取两个权值最小的节点for(j=0;j n+i;j+)if(haffTreej.weight=x1&haffT

39、reej.flag=0)x2=x1;x1=haffTreej.weight;/x1 代表左子的权值m2=m1;m1=j;/m1 代表左子的下标 else if(haffTreej.weight x2&haffTreej.flag=0)x2=haffTreej.weight;/x2 代表右子的权值m2=j;/m2 代表右子的下标 haffTreem1.parent=n+i;/将左子的父节点设置为新构造的节点haffTreem1.flag=1;/设置标志位1 haffTreem2.parent=n+i;/将右子的父节点设置为新构造的节点haffTreem2.flag=1;/设置标志位1 haffT

40、reen+i.leftChild=m1;/父节点的左子为m1 haffTreen+i.rightChild=m2;/父节点的右子为m2/父节点的权值为左子的权值与右子的权值的和haffTreen+i.weight=haffTreem1.weight+haffTreem2.weight;/进行哈夫曼树的编码,将编码形成的结果作为数组返回void EncodeHaffTree(HaffTree haffTree,int n,HaffCode haffCode,char chr,char target,char encode)int child,parent,start,i,j=0;char*ch;

41、ch=(char*)malloc(n*sizeof(char);/分配可以放得下n 个字符的内存空间/分配可以放得下n+1 个字符指针的内存空间haffCode=(HaffCode*)malloc(n+1)*sizeof(char*);chn-1=0;for(i=0;i n;i+)start=n-1;/编码的开始位置child=i;/设置当前节点parent=haffTreechild.parent;/设置父节点为当前节点的父节点while(parent!=-1)/如果当前节点存在父节点,则继续匹配文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX

42、7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ

43、5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4

44、D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:

45、CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7

46、HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 Z

47、B4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编

48、码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9哈夫曼编码与解码的实现-6-if(haffTreeparent.leftChild=child)/如果父节点的左子是当前节点 ch-start=0;/将字符0 存入数组 else/如果父节点的右子是当前节点 ch-start=1;/将字符1 存入数组 child=parent;/设置当前节点parent=haffTreechild.parent;/获取当前节

49、点的父节点 haffCodei=(char*)malloc(n-start)*sizeof(char);strcpy(haffCodei,&chstart);/存放当前叶子节点的哈夫曼编码 free(ch);/printf(*对所给的字符进行编码*n);printf(编码后的字符串为:n);for(i=0;istrlen(target);i+)/将目标文件编码作为结果返回 for(j=0;j n;j+)if(targeti=chrj)strcat(encode,haffCodej);printf(%s,haffCodej);/根据哈夫曼树进行哈夫曼解码,结果存入数组返回void DecodeH

50、affTree(HaffTree haffTree,int n,char encode,char result)int root,p,i,j=0;p=root=2*n-2;/设置遍历开始,根节点printf(解码后的字符串为:n);for(i=0;i strlen(encode);i+)if(encodei=0)/如果当前字符为0,则当前节点为原节点的左子 p=haffTreep.leftChild;else if(encodei=1)/如果当前字符为1,则当前节点为原节点的右子 文档编码:CX7I5V10L7O7 HQ5V3E3C5H2 ZB4D3U5G5S9文档编码:CX7I5V10L7O

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com