哈弗曼编码译码器

哈弗曼编码译码器

ID:14187639

大小:76.50 KB

页数:28页

时间:2018-07-26

哈弗曼编码译码器_第1页
哈弗曼编码译码器_第2页
哈弗曼编码译码器_第3页
哈弗曼编码译码器_第4页
哈弗曼编码译码器_第5页
资源描述:

《哈弗曼编码译码器》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、哈弗曼编码译码器#include#defineTRUE1#defineFALSE0#defineOK1#defineERROR0#defineINFEASIBLE-1#defineOVERFLOW-2#defineMAX_BUFFER_SIZE40960//40K以下的文件。#defineMAX_REFORM_SIZE1024//只读取前1k字符,做字典。#defineMAX_WORDS128#defineMAX_PATH512typedefintStatus;typedefstructdefineHfTre

2、eNode{intweight;intparent,lchild,rchild;}HTNode;//0号元素未使用。【0】.weight为叶子节点数。typedefHTNode*HfTree;typedefchar*HfCode;typedefstructdefineWeightList{intweight[MAX_WORDS];}WList;/************************************************************************//*方法声明*//***********

3、*************************************************************///扫描文件,获取字符的权值。intFormartFWeightList(char*fp,WList**wl);//默认权值表。WList*DefWeight();//依次存入权值,形成树的叶子节点。StatusStoneWlToHf(HfTree*ht,WListwl);//将含有权值的表转换成为哈弗曼树。StatusHfForming(HfTreeht);//扫描父节点为零的节点中最小的两个。Statu

4、sScanHT(HfTreeht,int*p1,int*p2);//从输入获取输入。StatusGetFromInput(char**buffer);//从文件获取输入。StatusGetFromFile(char*path,char**buffer);//获取输入,存入表。StatusGetWords(HfTree*ht,WListwl);//获取文件中的输入,存入表。StatusGetFWords(char*fp,HfTree*ht,WListwl);//构造可以存储N个叶子节点的HT。StatusCreatHT(HfTre

5、e*ht,intn);//编译哈弗曼编码。StatusFormHC(HfTreeht,HfCode*hc);//创建哈弗曼编码二维数组。StatusCreatHC(HfCode*hc,intn);//输出编码到屏幕。StatusPrintHC(HfCodehc);//输出权值表到屏幕。StatusPrintWlScn(WListwl);/*方法定义*///构建函数//创建哈弗曼编码二维数组。StatusCreatHC(HfCode*hc,intn){inti=n-1,j=MAX_WORDS-1;if((*hc)=(char*)m

6、alloc(n*MAX_WORDS*sizeof(char)))//0号元素表示维度数{//(*hc)[0]=(char*)(*hc);for(;i>0;i--){for(j=MAX_WORDS-1;j>=0;j--){(*hc)[i*MAX_WORDS+j]=-1;}}((int*)(*hc))[0]=n-1;returnOK;}else{returnERROR;}}//构造可以存储N个叶子节点的HT。StatusCreatHT(HfTree*ht,intn){inti=2*n;if((*ht)=(HfTree)malloc(

7、i*sizeof(HTNode))){for(i--;i>=0;i--){(*ht)[i].weight=(*ht)[i].lchild=(*ht)[i].rchild=(*ht)[i].parent=0;}returnOK;}else{returnERROR;}}//根据文件的字符,构造权值表wl。StatusFormartFWeightList(char*fp,WList**wl){inti=MAX_REFORM_SIZE;charc=0;inta=0;FILE*p=fopen(fp,"r");*wl=(WList*)mal

8、loc(sizeof(WList));for(;aweight[a]=1;}for(;i>0;i--){c=fgetc(p);if(c==EOF){break;}(*(*wl)).weight[c]++;}fclos

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。