• 大小: 4KB
    文件类型: .c
    金币: 2
    下载: 2 次
    发布日期: 2021-06-17
  • 语言: C/C++
  • 标签: Huffman  

资源简介

哈夫曼编码的c语言实现,代码中有注释。有编码和译码功能,能输出每个字符的Huffman码。可以输入一段Huffman码反应成文本,也可以输入一段文本翻译成Huffman码。计算了信源熵,编码效率,和平均编码长度。

资源截图

代码片段和文件信息

#include
#include
#include
#define MaxLength 30
#define MaxSpace 100
#define MaxBit 10
#define MaxWeight 10000
#define MaxLeaf 30
#define MaxNode MaxLeaf*2-1
typedef struct {
float weight;
int parent;
int lchild;
int rchild;
char value;
}HNodeType;
typedef struct {
int bit[MaxBit];
int start;
}HCodeType;
/*生成哈夫曼树*/
void HuffmanTree(HNodeType HuffmanTree[]int num) {
int i j x1 x2 n;
float m1m2;
n=num;
/*初始化*/
for (i = 0; i < 2 * n - 1; i++) {
HuffmanTree[i].weight = 0;
HuffmanTree[i].parent = -1;
HuffmanTree[i].lchild = -1;
HuffmanTree[i].rchild = -1;
HuffmanTree[i].value=‘ ‘;
}
for (i = 0; i < n; i++) {
printf(“输入字符和出现概率:“);
scanf(“%c%f“ &HuffmanTree[i].value&HuffmanTree[i].weight);
getchar();

}
/*连接节点*/
for (i = 0; i < n - 1; i++) {
m1 = m2 = MaxWeight;
x1 = x2=0;
for (j = 0; j < n + i; j++) {
if (HuffmanTree[j].weight < m1&&HuffmanTree[j].parent == -1) {
m2 = m1;
x2 = x1;
m1 = HuffmanTree[j].weight;
x1 = j;
}
else if (HuffmanTree[j].weight < m2&&HuffmanTree[j].parent == -1) {
m2 = HuffmanTree[j].weight;
x2 = j;
}
}
HuffmanTree[x1].parent = n + i;
HuffmanTree[x2].parent = n + i;
HuffmanTree[n + i].lchild = x1;
HuffmanTree[n + i].rchild = x2;
HuffmanTree[n + i].weight = HuffmanTree[x1].weight + HuffmanTree[x2].weight;
}
}
/*生成哈夫曼编码*/
void HaffmanCode(HNodeType Hutree[]HCodeType HuffCode[]int n) {
HCodeType cd;
int i j c plength;
float sumsum1sum2=0;
sum1=0;
HuffmanTree(Hutreen);
for (i = 0; i < n; i++) {
cd.start = n - 1;
c = i;
p = Hutree[c].parent;
while (p != -1) {
if (Hutree[p].lchild == c) cd.bit[cd.start] = 0;
else cd.bit[cd.start] = 1;
cd.start--;
c = p;
p = Hutree[c].parent;
}
for (j = cd.start + 1; j < n; j++) HuffCode[i].bit[j] = cd.bit[j];
HuffCode[i].start = cd.start;
}
for(i=0;i printf(“\n字符%c的哈弗曼编码为:“Hutree[i].value);
length=0;
for(j=Hu

评论

共有 条评论