实验报告(第四次作业)——哈夫曼编/译码器
姓名: 班级: 学号: 完成日期:
1.需求分析
程序设计任务: 设计一个程序,实现哈夫曼编码和译码的生成算法。
基本要求:输入字符集大小 n,以及 n 个字符和 n 个权值
构造哈夫曼树,产生每个字符的 Huffman 编码, 打印之
输入电文,将其翻译成比特流, 打印之
输入比特流,将其还原成电文, 打印之
测试数据:字符集大小:4;字符:A B C D ;权值:1 2 3 4 ;
字符集大小:5;字符:A B C D E;权值:1 2 3 4 5。
2.概要设计
ADT Stack{
基本操作:
Create_Huffman ( HuffmanTree &HT, int *w, char *ch, int n)
//操作结果:w 存放 n 个字符的权值,ch 存放字符,构造哈夫曼树;
HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int n)
//操作结果:从叶子到根逆向求每个字符的哈夫曼编码;
Decoding(HuffmanTree &HT, char *bits, char *chars)
//操作结果:Huffman 解码;
}ADT Stack
3.详细设计
定义的所有数据类型:
HTNode 型;HuffmanCode 型;int 型;void 型;char 型。
主程序模块:
//====================================哈夫曼编码译码
typedef struct HTNode{
int weight;
char data;
int parent,lchild,rchild;
}*HumanTree;//动态分配数组存储哈夫曼树
typedef char* *HumanCode;//动态分配数组存储哈夫曼编码表
void select(HumanTree &HT,int n,int &s1,int &s2);//函数声明
void Create_Human ( HumanTree &HT, int *w, char *ch, int n) {
//w 存放 n 个字符的权值,构造哈夫曼树
if(n<=1)return;
int m=2*n-1;
int i,s1,s2;
HT=new HTNode[m+1];//申请 Human 数组
for(i=1;i<=n;i++) {
HT[i].weight=w[i];
评论2
最新资源