首页 > 代码库 > Huffman对文件编码和解码
Huffman对文件编码和解码
考核实验中的一个,我也认为较为难的一个,其实也不是很难,只是有点复杂,只要分解成多个问题去解决就好了
比如你要知道Huffman是怎样对文件进行编码和解码的
然后需要知道怎么去建Huffman二叉树,建好了Huffman树 然后就是对其进行编码 最后是解码
只要把每个过程弄清楚了,用几天时间(对本科生而言)写出来应该还是有可能的
下面的代码是某位同学写的,经过其本人允许我决定贴到我的博客中供大家学习,但是如果按照源代码来演示的话,你懂得……
期中要编码的txt文件必须放在.cpp源文件同个文件夹下,所以大家在写的过程中要注意。。。
当然,这个代码的漏洞也有很多,欢迎大家来吐槽。。。
/* 功能:Huffman对文件进行编码和解码 时间:2014-11-24 */ #include<stdio.h> #include<stdlib.h> #include<string.h> //结点结构体 typedef struct Node { unsigned char value; //结点值 int frequency; //结点频数 struct Node *Lchild; //左儿子 struct Node *Rchild; //右儿子 }; //编码字符结构体 typedef struct { unsigned char value; //字符值 char code[100]; //字符编码 int frequency; // 字符频数 int codelen; //字符编码长度 }HuffmanCode; struct Node *root; //哈弗曼树根节点 //读取文件统计各个字母出现频率,返回字符种数 //filename为文件名,*node为用于保存数据的数组 int count(char filename[],HuffmanCode *node) { FILE *fp=fopen(filename,"rb"); //打开文件 unsigned char now; //读取的当前字符 int num = 0; //字符种数 fread(&now, sizeof(unsigned char), 1, fp); //读取字符 while(!feof(fp)) //未读到文件尾 { int i; //重复字符 for (i = 0; i < num; i++) { if (now == node[i].value) { node[i].frequency++; break; } } //未重复字符 if (i==num) { node[i].value = http://www.mamicode.com/now;>Huffman对文件编码和解码
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。