资源简介
用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 下雪场景实现
相关资源
- Huffman编码(二叉树应用)
- 图像序列编码为MJPEG视频文件
- 音频编码pcm的c语言实现
- Huffman编码以及其编码效率的计算
- 哈夫曼编码与译码附报告
- 曼彻斯特编码、解码
-
MFC ba
se64编码/解码工具 - 信道编码的C语言程序
- viterbi译码算法c++实现以及程序所对应
- VC++中文繁体、简体BIG-GBK编码转换程序
- 哈夫曼编码系统C语言实现
- 数据结构哈夫曼编码译码C语言版程序
- 旋转编码开关C语言单片机开发
- C语言-哈夫曼编码实验报告
- 基于哈夫曼编码的文件压缩解压程序
- CVSD编解码C语言程序
- C++ jpeg图像编码与解码
- c语言 实现费诺编码
- MP3音频解码流程带C语言源码加注释
- 哈夫曼树的应用和实现 C语言
- 维特比译码+卷积码编码程序C/C++实现
- 哈夫曼编码译码器实验报告内
- utf8编码解码的纯C++代码
- 哈夫曼最小生成树及最短路径代码
- C语言数据结构程序表达式求值 二叉树
- C语言 Huffman编码
- 对图像进行LZW编码
- 华为和google的C++编码规范
- Huffman 编码器与解码器-----数据结构课
- 哈夫曼编码
评论
共有 条评论