哈夫曼编码译码器

上传人:大米 文档编号:432588248 上传时间:2023-12-19 格式:DOC 页数:10 大小:56.50KB
返回 下载 相关 举报
哈夫曼编码译码器_第1页
第1页 / 共10页
哈夫曼编码译码器_第2页
第2页 / 共10页
哈夫曼编码译码器_第3页
第3页 / 共10页
哈夫曼编码译码器_第4页
第4页 / 共10页
哈夫曼编码译码器_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《哈夫曼编码译码器》由会员分享,可在线阅读,更多相关《哈夫曼编码译码器(10页珍藏版)》请在金锄头文库上搜索。

1、哈夫曼编码译码器#include #include #include #include #include#define ERROR 0; #define OK 1;typedef int Status;typedef struct unsigned int weight; int key;int parent,lchild,rchild;HTNode,*HuffmanTree;typedef char * * HuffmanCode;int *KEY;int N;Status GetData() FILE *fp;int key1002; int ch,k,i,tem; char str16;

2、fp=fopen(data.txt,r);k=0;while(!feof(fp)ch=fgetc(fp);i=0;while(ch!= ) stri=ch;i+;ch=fgetc(fp);stri=0;/printf(%dn,strcmp(str,空格 );if(!strcmp(str,keyk0= ;空格 )elsekeyk0=str0;ch=fgetc(fp);tem=0;while(ch!=n&ch!=EOF) tem=tem*10+ch-0; ch=fgetc(fp);keyk1=tem;/printf(%c,%dn,keyk0,keyk1);k+;KEY=(int * *)mallo

3、c(k*sizeof(int *);if(!KEY)return ERROR;for(i=0;ik;i+)KEYi=(int*)malloc(2*sizeof(int);if(!KEYi)return ERROR;KEYi0=keyi0; KEYi1=keyi1; N=k;fclose(fp);return OK;Status InitHuffmanTree(HuffmanTree &HT)int i;HT=(HTNode *)malloc(2*N-1)*sizeof(HTNode);if(!HT)return ERROR;for(i=0;iN;i+)HTi.weight=KEYi1; HTi

4、.key=KEYi0; HTi.parent=-1;HTi.lchild=-1;HTi.rchild=-1;for(;i=2)while(HT+i)-parent)!=-1) i+;fi=i;i+;while(HT+i)-parent!=-1) i+;si=i;if(HT+fi)-weight(HT+si)-weight)tem=fi;fi=si;si=tem;for(i+;iparent=-1)if(HT+i)-weightweight)si=fi;fi=i;elseif(HT+i)-weightweight)si=i;int HuffmanTreeAllReady(HuffmanTree

5、HT,int m)int sum=0,i;for(i=0;iparent=-1) sum+;if(sum1)return 0;return 1;void CreateHuffmanTree(HuffmanTree &HT,int n)int s1,s2;while(!HuffmanTreeAllReady(HT,n) Select(HT,n,s1,s2);HTn.parent=-1;HTn.lchild=s1;HTn.rchild=s2;HTn.weight=HTs1.weight+HTs2.weight;HTs1.parent=n;HTs2.parent=n;n+;void HuffmanC

6、oding(HuffmanTree &HT,HuffmanCode &HC,int n) char * str;int len=0,tem,i,j;unsigned int p;str=(char *)malloc(n*sizeof(char);for(i=0;in;i+)p=i;len=0;while(tem=HTp.parent)!=-1)if(HTtem.lchild=p)strlen=0;elsestrlen=1;len+;p=tem;HCi=(char *)malloc(len+1)*sizeof(char);if(HCi)for(j=0;jlen;j+)HCij=strlen-1-

7、j;HCilen=0;strlen=0;/printf(%d,%dn,HCi0,len); void OutputHuffmanCode(HuffmanCode HC)int i;for(i=0;i %sn,KEYi0,HCi);void Coding(HuffmanCode HC)FILE *fp,*fq;int ch,t;fp=fopen(加密明文 .txt,r); fq=fopen(ch=fgetc(fp);while(ch!=EOF)if(ch= )t=0;elset=ch-A+1;加密密文 .txt,w+);fputs(HCt,fq);/printf(%c,ch); /printf(

8、%s,HCt); ch=fgetc(fp);fclose(fp);fclose(fq);printf(OKn);void Decoding(HuffmanTree HT,int N)FILE *fp,*fq;int ch,t;fq=fopen(解密明文 .txt,w+); fp=fopen(ch=fgetc(fp);while(ch!=EOF)t=2*N-2;while(HTt.lchild!=-1&HTt.rchild!=-1)if(ch=0)t=HTt.lchild;elset=HTt.rchild;/printf(%c,ch); ch=fgetc(fp);解密密文 .txt,r);/pr

9、intf(%c,ch); fputc(HTt.key,fq); /printf(%c,HTt.key); /printf(%s,HCt); /ch=fgetc(fp);fclose(fp);fclose(fq);printf(OKn);int main()HuffmanTree HT;HuffmanCode HC;int n,i,j,a,b,x;GetData();HC=(char * *)malloc(N)*sizeof(char *);InitHuffmanTree(HT);CreateHuffmanTree(HT,N);HuffmanCoding(HT,HC,N); /for(i=0;i2*N-1;i+) /printf(%d,%d,%d,%c,%d,%dn,i,HTi.parent,HTi.weight,HTi.key,HTi.lchild,HTi.rchild);/printf(选项 :1. 输出哈夫曼编码2. 输入明文得到密文3. 输入密文得到明文0. 退出 n);printf(输入选项 :);while(scanf(%d,&x),x) switch(x)case 1 :OutputHuffmanCode(HC); break;case 2 :

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 演讲稿/致辞

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号