资源简介
用c语言实现的哈夫曼编码译码器,是数据结构中的经典案例。里面含有设计报告和源代码。把好的东西贡献出来,供大家参考一下。

代码片段和文件信息
#include
#include
#include
#include
typedef struct {
int weight;
int parent;
int lchild;
int rchild;
} HTNode*HuffmanTree;
typedef char* *HuffmanCode;
void InitCreation(int nint *wchar *a FILE *H)
{
int iq*s;
char p;
printf(“ 要编码的所有字母为\n“);
H=fopen(“hfmTree““r“);
for(i=1;i<=n;i++)
{
p=fgetc(H);
a[i]=p;
}
a[n+1]=‘\0‘;
putchar(‘ ‘);
for(i=1;i {
putchar(a[i]);
}
printf(“空格\n“);
for(i=0s=w;i {
fscanf(H“%d“&q);
*s=q;
}
printf(“ 要编码的字符的所有权值为\n“);
printf(“ “);
for(i=0;i {
printf(“%d “*(w+i));
}
printf(“\n“);
fclose(H);
}
int Select(HuffmanTree HTint pint r)
{
int ijmin;
for(i=1min=10000;i<=p;i++)
{
if(i!=r)
{
if(HT[i].parent==0&&min>HT[i].weight)
{
min=HT[i].weight;
j=i;
}
}
}
return(j);
}
void HuffmanCoding(HuffmanTree HTHuffmanCode HCint nchar *aint *w)
{
HuffmanTree p;
int mirsfcstart;
char *cd;
if(n<=1) return;
m=2*n-1;
for(p=HT+1i=1;i<=n;++p++i++w)
{
p->weight=*w;
p->parent=0;
p->lchild=0;
p->rchild=0;
}
for(;i<=m;++i++p)
{
p->weight=0;
p->parent=0;
p->lchild=0;
p->rchild=0;
}
for(i=n+1;i<=m;++i)
{
r=Select(HTi-10);
s=Select(HTi-1r);
HT[r].parent=i;
HT[s].parent=i;
HT[i].lchild=r;
HT[i].rchild=s;
HT[i].weight=HT[r].weight+HT[s].weight;
}
printf(“HT数组中所有的数据为\n“);
printf(“HT weight parent lchild rchild\n“);
for(p=HT+1i=1;i<=m;++p++i)
{
printf(“ %d %d %d %d\n“p->weight p->parent p->lchildp->rchild );//输出数组中所有的数据
}
cd=(char*)malloc(n*sizeof(char));
cd[n-1]=‘\0‘;
printf(“所有字符的编码为\n“);
for(i=1;i<=n;i++)
{
start=n-1;
for(c=if=HT[i].parent;f!=0;c=ff=HT[f].parent)
{
if(HT[f].lchild==c)
cd[--start]=‘0‘;
else
cd[--start]=‘1‘;
}
HC[i]=(char*)malloc((n-start)*sizeof(char));
strcpy(HC[i]&cd[start]);
if(i==n)
{
printf(“空格“);
}
else
{
printf(“%c“a[i]);
}
printf(“%s\n“HC[i]);
}
}
void HuffmanCreat(HuffmanCode HCFILE *TFILE *Cint n)
{
char ab*p;
int i;
printf(“ 对ToBeTran文件加密后的内容为\n“);
T=fopen(“ToBeTran““r“);
C=fopen(“CodeFile““w“);
a=fgetc(T);
while(a!=EOF)
{
if(a==‘ ‘)
{
i=n;
}
else
{
i=a-96;
}
p=HC[i];
b=*p;
p=p+1;
for(;b!=‘\0‘;p++)
{
fputc(bC);
b=*p;
}
printf(“%s“HC[i]);
a=fgetc(T);
}
fclose(T);
fclose(C);
printf(“\n“);
}
void HuffmanChange(HuffmanTree HTchar *aFILE *CFILE *F)
{
int imrt;
char q;
t=0;
for(i=1;t==0;i++)
{
if(HT[i].parent ==0)
{
t=i;
}
}
printf(“ 对CodeFile解密后的内容为\n“);
m=1;
C=fopen(“CodeFile““r“);
F=fopen(“TextFile““w“);
do
{
if(m!=0
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 102 2009-06-30 10:52 哈夫曼编译码器\Debug\hfmTree
文件 196715 2009-07-20 17:32 哈夫曼编译码器\Debug\sdfsdfas.exe
文件 205320 2009-07-20 17:32 哈夫曼编译码器\Debug\sdfsdfas.ilk
文件 15652 2009-07-20 17:32 哈夫曼编译码器\Debug\sdfsdfas.obj
文件 197584 2009-07-17 11:19 哈夫曼编译码器\Debug\sdfsdfas.pch
文件 484352 2009-07-20 17:32 哈夫曼编译码器\Debug\sdfsdfas.pdb
文件 96 2009-06-30 15:51 哈夫曼编译码器\Debug\ToBeTran
文件 33792 2009-07-20 17:32 哈夫曼编译码器\Debug\vc60.idb
文件 53248 2009-07-20 17:32 哈夫曼编译码器\Debug\vc60.pdb
文件 102 2009-06-30 10:52 哈夫曼编译码器\hfmTree
文件 4460 2009-07-17 11:18 哈夫曼编译码器\sdfsdfas.c
文件 96 2009-06-30 15:51 哈夫曼编译码器\ToBeTran
文件 266752 2011-05-25 20:00 哈夫曼编译码器\哈夫曼编译码器.doc
目录 0 2011-05-25 18:56 哈夫曼编译码器\Debug
目录 0 2011-05-25 20:01 哈夫曼编译码器
----------- --------- ---------- ----- ----
1458271 15
- 上一篇:C图像读写源代码.zip
- 下一篇:vc++ opengl 下雪场景实现
相关资源
- 通信过程中的RS编译码程序(c语言)
- 百度C++编码规范
- GBT 28169-2011 嵌入式软件 C语言编码规范
- 缩短循环码(2616)编译码程序-C语言
- pcm语音编码
- UNIX/LINUX下C语言中文短信UCS2编码和解
- 信息论课程设计——LZW编码
- c语言实现bch编码
- 个人总结的一些C/C++编码规范
- 谷歌C++编码规范 Google C++ 风格指南
- C语言实现LZW编码
- BCH编译码c语言实现
- C++实现的改进遗传算法
- c++ 数据结构 哈夫曼压缩&解压软件 控
- ldpc编译码c代码
- MFC莫尔斯电码的编码发声
- Google-C++编码规范中文版最新整理PDF版
- 哈夫曼压缩和解压c++源码
- spiht算法小波图像编码算法
- GBT28169-2011嵌入式软件C语言编码规范
- 嵌入式软件C语言编码规范(高安全性
- 文件压缩程序基于哈夫曼C++算法
- 密码编码学:加密方法的C与C++实现
- MMX-密码编码学:加密方法的C与C++实现
- MFC 一维码生成+打印 支持多种编码1
- Huffman和算术编码的C++实现
- 基于JPEG2000的图像编码与解码c++版
- 简单实现的自适应算术编码
- BCH编译码--C语言实现
- 谷歌C++编码规范-中文 2018-03-30 最新版
评论
共有 条评论