• 大小: 3KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-06-05
  • 语言: C/C++
  • 标签: 数据结构  C语言  

资源简介

1、从终端读入要编码的字符串,对所输入的字符串进行频率统计并建立哈夫曼树。 2、输出每个字符的编码。 3、根据已有的各个字符的编码,输入一段正确的电文,然后对输入的电文进行译码。

资源截图

代码片段和文件信息

/**************************************************
实验六 哈夫曼编码实现

1、 从终端读入要编码的字符串,对所输入的字符串进行频率统计并建立哈夫曼树。
2、 输出每个字符的编码。
3、 根据已有的各个字符的编码,输入一段正确的电文,然后对输入的电文进行译码。
 
****************************************************/

#include
#include
#include
#define NULL 0
#define StackSize 20
#define TRUE 1
#define FALSE 0

typedef struct{
char chr;
unsigned int weight;
char *encode;
}Data;
typedef struct{
char c;
unsigned int w;
unsigned int parent;
unsigned int lchild;
unsigned int rchild;
}HTNode*HuffmanTree;

int GetData(Data** ppdint* n){
int i=0;
int m=0;
char c=0;
Data* pd=NULL;
L: while((c=getchar())!=‘\n‘){
for(i=0;i if(c==pd[i].chr) 
{pd[i].weight++;goto L;}
}/*for*/
if(i==m){
pd=(Data*)realloc(pd(m+1)*sizeof(Data));
if(!pd) return FALSE;
pd[m].chr=c;
pd[m].weight=1;;
pd[m].encode=NULL;
m++;
}/*if*/
}/*while*/
*n=m;
*ppd=pd;
return TRUE;
}

void Select(HuffmanTree HTint nint *s1int *s2){
int  i=1s=0t=0;
unsigned int value=65535;
for(;i<=n;i++) if(HT[i].w value=65535;
for(i=1;i<=n;i++) if(HT[i].w *s1=s;*s2=t;
}

int BuildTree(HuffmanTree* p_HTData* pdint n){
int m=0i=0;
int s1=0s2=0;
HuffmanTree HT;
m=2*n-1;
if(n<=1) return FALSE;
HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));
if(!HT) return FALSE;
for(i=1;i<=n;i++) {HT[i].c=pd[i-1].chr;HT[i].w=pd[i-1].weight;HT[i].parent=0;HT[i].lchild=0;HT[i].rchild=0;};
for(;i<=m;i++) {HT[i].c=0;HT[i].w=0;HT[i].parent=0;HT[

评论

共有 条评论