资源简介
哈夫曼编码的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
- 上一篇:C++、QT学习记录
- 下一篇:OpenCV算法精解-代码.rar
相关资源
- c++ 数据结构 哈夫曼压缩&解压软件 控
- C++文本文件无失真压缩 Huffman
- Huffman和算术编码的C++实现
- Huffman编码MFC版本
- 用哈夫曼编码压缩文件
- 数据结构实习 软件压缩/解压缩软件
- c++自适应哈夫曼编码
- Huffman编码(c++版本)_数据结构与算法
- 基于c语言的huffman图像编解码
- 基于huffman编码的文件解压缩程序(
- 基于Huffman树的文件压缩C语言源码数据
- Huffman编码(二叉树应用)
- Huffman编码以及其编码效率的计算
- 基于哈夫曼编码的文件压缩解压程序
- C语言 Huffman编码
- Huffman 编码器与解码器-----数据结构课
- 自适应霍夫曼编码(C++)
- 赫夫曼树的构建及赫夫曼编码C语言源
- 哈夫曼树的建立(Huffman Tree C语言实现
- 实现对任意格式文件压缩 C++
- Huffman 编码
- Huffman编/译码器C语言代码
- 霍夫曼编码C++实现
- 哈夫曼压缩解压算法-C语言
- 26个大写字符和空格的Huffman编码
- huffmantree对英文短文编码,译码
- huffman算法源码
- Huffman课程设计
- Huffman文件压缩解压缩-C语言-数据结构
- 自适应Huffman编码
评论
共有 条评论