1 / 7
文档名称:

哈弗曼编码.doc

格式:doc   大小:28KB   页数:7页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

哈弗曼编码.doc

上传人:iris028 2021/1/9 文件大小:28 KB

下载得到文件列表

哈弗曼编码.doc

相关文档

文档介绍

文档介绍:#include <>
#include <>
#include <>
#include <>
#define MAXLEN 100
typedef struct
{
char ch;
int weight;
int lchild;
int rchild;
int parent;
}HTNode;
typedef HTNode HFMT[MAXLEN];
typedef char **HfCode;
int n;
void InitHFMT(HFMT T)
{
int i;
printf("\n\t\tÇëÊäÈë¹²ÓжàÉÙ¸öȨֵ£¨Ð¡ÓÚ100£©£º");
scanf("%d",&n);
getchar();
for (i=0;i<2*n-1;i++)
{
T[i].weight=0;
T[i].lchild=-1;
T[i].rchild=-1;
T[i].parent=-1;
}
}
void InputWeight(HFMT T,char *weightFile)
{
int w;
int i;
int n;
char ch;
FILE *fp;
if ((fp=fopen(weightFile,"r"))!=NULL)
{
fscanf(fp,"%d\n",&n);
for (i=0;i<n;i++)
{
ch=fgetc(fp);
fscanf(fp,"%d\n",&w);
T[i].ch=ch;
T[i].weight=w;
}
}
fclose(fp);
}
void SelectMin(HFMT T,int i,int *p1,int *p2)
{
long min1=999999;
long min2=999999;
int j;
for (j=0;j<=i;j++)
{
if (T[j].parent==-1)
{
if (min1>T[j].weight)
{
min1=T[j].weight;
*p1=j;
}
}
}
for (j=0;j<=i;j++)
{
if (T[j].parent==-1)
{
if (min2=T[j].weight&&j!=(*p1))
{
min2=T[j].weight;
*p2=j;
}
}
}
}
void CreatHFMT(HFMT T)
{
int i,p1,p2;
InitHFMT(T);
InputWeight(T,"");
for (i=n;i<2*n-1;i++)
{
SelectMin(T,i-1,&p1,&p2);
T[p1].parent=T[p2].parent=i;
//T[i].lchild=T[p1].weight;
//T[i].rchild=T[p2