⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 huffmanuncoding.c

📁 哈夫曼编码解码以及文档资料和Makefile文件。
💻 C
字号:
#include "head.h"#include "struct.h"#include "declare.h"int HuffmanUncoding(HuffmanTree HT,char *filename,CharArr *ch)//译码{	FILE *code,*uncode;	char uncodename[]="uncodefile";	char c;	int m,n,i;	HuffmanTree p;	int s1=0,s2=0;#if 1	int j;#endif	code=fopen(filename,"rt");	if(code==NULL)	{		fprintf(stderr,"open file fail:%s",strerror(errno));		return -1;	}	uncode=fopen(uncodename,"wt");	if(uncode==NULL)	{		fprintf(stderr,"creat file fail:%s",strerror(errno));		return -1;	}	if(ch->size<1)		return -1;	n=ch->size;	m = 2*n-1;	HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));	for(p=HT+1,i=1;i<=n;++i,++p)	{		p->s=ch->e[i-1].c;		p->weight=ch->e[i-1].w;		p->parent=0;		p->lchild=0;		p->rchild=0;	}	for(;i<=m;++i,++p)	{		p->s='\0';		p->weight=0;		p->parent=0;		p->lchild=0;		p->rchild=0;	}	for(i=n+1;i<=m;++i)	{		SelectMin(HT,i-1,&s1,&s2);		HT[s1].parent=i;		HT[s2].parent=i;		if(s1<=s2)		{			HT[i].lchild=s1;			HT[i].rchild=s2;		}		else		{			HT[i].lchild=s2;			HT[i].rchild=s1;		}		HT[i].weight = HT[s1].weight+HT[s2].weight;	}			//p=HT+m;	//printf("\t%d\t%d\t%d\t%d\n",p->weight,p->parent,p->lchild,p->rchild);		#if 1	for(p=HT+1,j=0;p->parent!=0||j<m;p++,j++)		printf("\t%d\t%d\t%d\t%d\n",p->weight,p->parent,p->lchild,p->rchild);	#endif		for(c=fgetc(code),p=HT+m;!feof(code);p=HT+m)     {        for(;p->lchild&&p->rchild;c=fgetc(code))//从根出发至叶子节点        {        	//printf("%c",c);             if(c=='0')                 p=HT+p->lchild;             else if(c=='1')                 p=HT+p->rchild;        }        if(!p-> lchild&&!p->rchild)        {        	for(i=0;i<ch->size;i++)			{				if((p->weight==ch->e[i].w)&&(p->s==ch->e[i].c))				{					fprintf(uncode,"%c",ch->e[i].c);					//printf("\t%c\n",ch->e[i].c);					//getchar();				}			}        }     }	fclose(uncode);	fclose(code);	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -