资源简介
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个文件信息
相关资源
- 厦门大学-数据结构-期末考试试题
- 西安电子科技大学计算机学院数据结
- ACM模板大全
- 蓝桥杯官网练习题和测评数据-入门训
- 景区信息管理系统和停车场
- 数据结构-advanced data structure (peter
- 数据结构数组稀疏矩阵及广义表、递
- 数据结构课程设计——算数表达式求
- 数据结构课程设计--学生成绩管理系统
- 邓俊辉 数据结构 source code
- 数据结构及应用算法教程修订版课件
- 数据结构严蔚敏版学习笔记
- 高级数据结构PPT 英文版
- 常用压缩算法源代码
- 数据结构知识点总结全面版
- 数据结构复试/夏令营面试常问问题
- 浙江大学数据结构课程(陈越)____数
- 五邑大学数据结构实验
- 南京师范大学数据结构和数据库系统
- 数据结构课程设计 哈希表 c语音代码
- SSD5:数据结构
- 数据结构 第三章 栈与队列 数据结构
- 浙江师范大学_数据结构与算法_习题集
- 数据结构学生选课课程设计
- 火车、飞机票务管理系统数据结构
- 两个火车票务管理系统数据结构
- 数据结构课程设计——统计学生成绩
- 数据结构薛超英第二版
- 数据结构习题与解析完整版本唐发根
- 数据结构与算法之算法之美.pdf
评论
共有 条评论