哈夫曼编码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#include

#include

#define MAX 99999

#define N 27 //定义最多节点个数

#define M 2*N-1 //中间节点个数

typedef struct

{

int weight;

int parent;

int lchild;

int rchild;

}HTNode,*HuffmanTree[M+1]; //因为零号单元不适用

typedef char *HuffmanCode[N+1];

HuffmanCode co; //创建全局变量用于存储HuffmanCode

char CH[N];

int weight[N]={64,13,22,32,103,21,15,47,57,1,5,32,20,57,63,15,1,48,51,80,23,8,18,1,16,1}; HuffmanTreeht;

char word[30]; //全局变量用于储存键入的内容

void Init_CH()

{

int i;

CH[26]='';

CH[0]='A';

for(i=1;i<26;i++)

CH[i]='A'+i;

for(i=0;i<27;i++)

printf("%c",CH[i]);

}

void select(int *sr,int *sl,int n)

{

int i,point;

point=MAX;

for(i=0;i

{

if(ht[i+1].weight

{

*sr=i+1; //*sr是最小的

point=ht[*sr].weight;

}

}

ht[*sl].parent=1;

}

void InitHuffmanCode()

{

int i,sr,sl;

for(i=1;i<=N;i++)

{

ht[i].weight=weight[i-1];

ht[i].parent=0;

ht[i].lchild=0;

ht[i].rchild=0;

}

for(i=N+1;i<=M;i++)

{

ht[i].weight=0;

ht[i].parent=0;

ht[i].lchild=0;

ht[i].rchild=0;

}

printf("..........初始化完成..........\n");

for(i=N+1;i<=M;i++)

{

select(&sr,&sl,i-1);

ht[i].weight=ht[sr].weight+ht[sl].weight;

ht[sr].parent=i;

ht[sl].parent=i;

ht[i].lchild=sr;

ht[i].rchild=sl;

}

for(i=1;i<=M;i++)

{

printf("%d%d\n",ht[i].parent,i);

}

}

void CreateHuffmanCode()

{

FILE *trans;

int i,start,p,c;

char *cd;

cd=(char*)malloc(N*sizeof(char));

cd[N-1]='\0';

for(i=1;i<=N;i++)

{

start=N-1;

c=i;

p=ht[i].parent;

while(p)

{

--start;

if(ht[p].lchild==c)

cd[start]='0';

else

cd[start]='1';

c=p;

p=ht[p].parent;

}

co[i]=(char*)malloc((N-start)*sizeof(char));

strcpy(co[i],&cd[start]);

printf("%s %d\n",co[i],i);

}

if((trans=fopen("C:data.txt","w"))==NULL)

{

printf("不能打开此文件!");

exit(0);

}

fputs("..........哈夫曼编码表初始化如下..........\n",trans);

for(i=0;i

{

fputc(CH[i],trans);

fputs(" :",trans);

fputs(co[i+1],trans);

fputs("\n",trans);

}

fclose(trans);

}

void InputHuffmanWord()

{

FILE *fp;

if((fp=fopen("C:stword.txt","w"))==NULL)

{

printf("不能打开此文件!");

exit(0);

相关文档
最新文档