• 大小: 3KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-19
  • 语言: C/C++
  • 标签: C实现  

资源简介

哈夫曼编码:从键盘输入若干字符及每个字符出现的频率,将字符出现的频率作为结点的权值,建立哈夫曼树,然后对各个字符进行哈夫曼编码,最后打印输出字符及对应的哈夫曼编码。

资源截图

代码片段和文件信息

#include  
#include   
#define N 10 /*待编码字符的个数,即树中叶结点的最大个数*/ 
#define M 2*N-1 /*树中总的结点数目*/ 

typedef struct{ 
int weight;  
int parentlchildrchild;  
}HTNode; /*树中结点的结构*/ 

typedef struct {  
char data; /*待编码的字符*/ 
int weight; /*字符的权值*/ 
char code[N]; /*字符的编码*/ 
} HTCode;  

void Init(HTCode hc[]int *n){  /*初始化,读入待编码字符的个数n,从键盘输入n个字符和n个权值*/ 
int i; 
printf(“please input the number of code which is to be encoded‘n‘(end by 0):\n“); 
scanf(“%d“&(*n)); 
if(*n!=0){  
printf(“input %d character\n“*n);getchar(); 
for (i=1;i<=*n;i++)
hc[i].data=getchar(); 
printf(“input %d weight\n“*n); 
for (i=1;i<=*n;i++)  
scanf(“%4d“&hc[i].weight); 


}  

void Select(HTNode ht[]int kint *s1int *s2){ 
 /*ht[1?k]中选择parent为0,并且weight最小的两个结点其序号由指针变量s1s2指向*/ 
int i;  
for (i=1;i<=k && ht[i].parent!=0;i++); 
*s1=i;  
for (i=1;i<=k;i++)  
if (ht[i].parent==0 && ht[i].weight *s1=i; 
for (i=1; i<=k;i++)  
if (ht[i].parent==0 && i!=*s1) 
break; 
*s2=i;  
for (i=1;i<=k;i++)  
if ( ht[i].parent==0 && i!=*s1 && ht[i].weight *s2=i; 
}  

void huffman(HTNode ht[]HTCode hc[]int n)

int ims1s2; 
m=2*n-1;  
for (i=1;i<=m;i++){  
if (i<=n) ht[i].weight=hc[i].weight; 
else ht[i].weight=0;  
ht[i].parent=

评论

共有 条评论