资源简介
Huffman编码与解码 (选做)(Huffman编码、二叉树)
[问题描述]
对一篇英文文章,统计各字符出现的次数,实现Huffman编码,以及对编码结果的解码。
[基本要求]
(1) 输出每个字符出现的次数和编码,其中求最小权值要求用堆实现。
(2) 在Huffman编码后,要将编码表和英文文章编码结果保存到文件中,编码结果必须是二进制形式,即0 1的信息用比特位表示,不能用字符’0’和’1’表示。
(3) 提供读编码文件生成原文件的功能。

代码片段和文件信息
#include
#include
#include
#include
using namespace std;
typedef struct {
int weight;
int parentlchildrchild;
}HTNode;
typedef char **HuffmanCode;
HTNode HT[5000];
HuffmanCode HC;
char *cd;
#define code_LEN 10000
char Letter[5000]c;
int Fre_Letter[5000];
int Num_Letter;
int Hr[5000];
int size=0;
int HeapLength;
void init()
{
int findi;
Num_Letter=0;
FILE *fpin;
fpin = fopen(“a.txt““r“);
while((c = fgetc(fpin))!= EOF)
{
find=0;
for (i=1;i<=Num_Letter;i++)
{
if (Letter[i]==c)
{
Fre_Letter[i]++;
find=1;
break;
}
}
if (find==0)
{
Num_Letter++;
Letter[Num_Letter]=c;
Fre_Letter[Num_Letter]=1;
}
}
fclose(fpin);
for (i=1;i<=Num_Letter;i++)
cout< }
void HeadAdjust(int s int m) //堆排序中的节点维护
{
int rcj;
rc = Hr[s];
for (j=2*s; j<=m; j*=2)
{
if (j if (HT[rc].weight<=HT[Hr[j]].weight) break;
Hr[s] = Hr[j]; s= j;
}
Hr[s] = rc;
}
void HuffmanCoding(int *wint n){
int ms1is2;
if (n<=1) return;
m=2*n-1;
HT[0].weight=23423432;
for (i=1;i<=n;i++)
{
HT[i].weight = w[i];
HT[i].lchild = NULL;
HT[i].rchild = NULL;
HT[i].parent = NULL;
}
for (i=n+1;i<=m;i++)
{
HT[i].weight=0;
HT[i].lchild = NULL;
HT[i].rchild = NULL;
HT[i].parent = NULL;
}
for (i=1;i<=n;i++)
Hr[i]=i;
for(i = n/2; i>0; i--) //堆排序预处理
HeadAdjust(in);
for (i=n+1;i<=m;i++)
{
s1 = Hr[1];
Hr[1] = 0;
HeadAdjust(1n);
s2 = Hr[1];
HT[i].weight = HT[s1].weight+HT[s2].weight;
HT[i].lchild = s1;
HT[i].rchild = s2;
HT[s1].parent = i;
HT[s2].parent = i;
Hr[1] = i;
HeadAdjust(1n);
}
HC=(HuffmanCode)malloc(Num_Letter*code_LEN*5*sizeof(char));
cd=(char *)malloc(5*code_LEN*sizeof(char));
cd[n-1]=‘\0‘;
for (i=1;i<=n;i++)
{
int start=n-1;
int cf;
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]);
}
free(cd);
}
void PrintHuffmanCode()
{
FILE *fpin*fpout;
int i;
for (i=1;i<=Num_Letter;i++)
cout< fpin = fopen(“a.txt““r“);
fpout= fopen(“b.txt““w“);
cout< while((c = fgetc(fpin))!= EOF)
{
for (i=1;i<=Num_Letter;i++)
if (Letter[i]==c)
{
fprintf(fpout“%s“HC[i]);
break;
}
}
fclose(fpin);
fclose(fpout);
}
void GetHuffmanCode()
{
char *cd;
int tiflag;
t=0;
FILE *fpin*fpout;
cd=(char *)malloc(code_LEN*sizeof(char));
fpout= fopen(“d.txt““w“);
fpin = fopen(“b.txt““r“);
while((c = fgetc(fpin))!= EOF)
{
cd[t]=c;
flag=0;
cd[t+1]=‘\0‘;
for (i=1;i<=Num_Letter;i++)
if (strcmp(cdHC[i])==0)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2012-03-06 16:32 7Huffman编码与解码\
文件 45 2011-12-22 20:19 7Huffman编码与解码\1.txt
文件 44 2011-12-22 20:19 7Huffman编码与解码\2.txt
文件 45 2011-12-22 20:20 7Huffman编码与解码\3.txt
目录 0 2012-03-06 16:32 7Huffman编码与解码\7\
文件 3341 2011-12-21 11:05 7Huffman编码与解码\7.dsp
文件 510 2011-12-21 11:05 7Huffman编码与解码\7.dsw
文件 41984 2011-12-21 11:05 7Huffman编码与解码\7.ncb
文件 48640 2011-12-21 11:05 7Huffman编码与解码\7.opt
文件 2258 2011-12-21 11:05 7Huffman编码与解码\7.plg
文件 3351 2011-12-21 22:42 7Huffman编码与解码\70.cpp
文件 3353 2011-12-22 21:55 7Huffman编码与解码\70.dsp
文件 512 2011-12-22 21:56 7Huffman编码与解码\70.dsw
文件 33792 2011-12-22 21:56 7Huffman编码与解码\70.ncb
文件 48640 2011-12-22 21:56 7Huffman编码与解码\70.opt
文件 1099 2011-12-22 21:55 7Huffman编码与解码\70.plg
文件 3341 2011-12-21 19:07 7Huffman编码与解码\7\7.dsp
文件 508 2011-12-21 19:14 7Huffman编码与解码\7\7.dsw
文件 912145 2011-12-21 22:48 7Huffman编码与解码\7\7.exe
文件 41984 2011-12-21 19:14 7Huffman编码与解码\7\7.ncb
文件 5489 2011-12-21 22:48 7Huffman编码与解码\7\7.o
文件 48640 2011-12-21 19:14 7Huffman编码与解码\7\7.opt
文件 236 2011-12-21 19:14 7Huffman编码与解码\7\7.plg
文件 4648 2011-12-22 11:39 7Huffman编码与解码\7\71.cpp
文件 3353 2011-12-22 19:58 7Huffman编码与解码\7\71.dsp
文件 510 2011-12-22 19:58 7Huffman编码与解码\7\71.dsw
文件 912147 2011-12-21 23:41 7Huffman编码与解码\7\71.exe
文件 41984 2011-12-22 19:58 7Huffman编码与解码\7\71.ncb
文件 5081 2011-12-21 23:41 7Huffman编码与解码\7\71.o
文件 48640 2011-12-22 19:58 7Huffman编码与解码\7\71.opt
文件 238 2011-12-22 19:58 7Huffman编码与解码\7\71.plg
............此处省略41个文件信息
相关资源
- 数据结构年终考题范围和答案 耿国华
- 数据结构 朱战力 习题解答 数据结构
- 数据结构课程设计 6 1 彩票系统
- 教学计划编制系统
- 大数(链表、数组)实现
- 自己写的航空订票系统c 版--数据结构
- 数据结构实验魔王语言
- 航空订票系统_数据结构课程设计
- 多项式求和(数据结构C 版)
- 尚观培训linux董亮老师关于数据结构的
- 数据结构 知识点总结
- 华南理工大学数据结构复习提纲二
- 华南理工大学数据结构复习提纲一
- 数据结构用C 写的停车场系统源代码
- 数据结构(河北科技大学)
- 数据结构考前习题 清华大学出版社
- 数据结构课件(北邮)
- 数据结构实验 基于栈的表达式求值
- 数据结构课程设计——图书管理系统
- 成绩管理系统(数据结构)
- 数据结构-最小通信网问题
- 数据结构课程设计同学通讯录系统
- 数据结构课程设计 公园导游图
- 数据结构殷人昆版的课后答案
- 2006年湖北工业大学409数据结构试题
- 数据结构实验-魔王语言-源码加实验报
- 简单计算器的实现(数据结构)
- 简单计算器的实现(数据结构 修正版
- Fundamentals of Data Structure in C
- 北京邮电大学数据结构历年考研真题
评论
共有 条评论