1.需求分析
1.1问题描述
设计一个利用哈夫曼算法的编码和译码系统,重复地显示并处理以下项目,直到选择退出为止。
1.2 基本要求
将权值数据存放在数据文件(文件名为data.txt,位于执行程序的当前目录中)
分别采用动态和静态存储结构
初始化:键盘输入字符集大小n、n个字符和n个权值,建立哈夫曼树;
编码:利用建好的哈夫曼树生成哈夫曼编码;
输出编码;
设字符集及频度如下表:
字符 空格 A B C D E F G H I J K L M
频度 186 64 13 22 32 103 21 15 47 57 1 5 32 20
字符 N O P Q R S T U V W X Y Z
频度 57 63 15 1 48 51 80 23 8 18 1 16 1
1.3进一步完成内容
译码功能;
显示哈夫曼树;
界面设计的优化。
2.概要设计
2.1存储结构设计
typedef struct HTNode{
char c;
int weight;
int parent,lchild,rchild;
}HTNode,*HuffmanTree;
定义一个结构体表示哈夫曼树,结构体中包括输入的字符、该字符的权值,以及结点的双亲、左孩子、右孩子的下标变量。将哈夫曼树的各结点存储在由HuffmanTree定义的动态分配的数组中。
typedef char **HuffmanCode;
由于每个哈夫曼编码是变长编码,使用一个指针数组来存放每个字符编码串的首地址,各字符的哈夫曼编码存储在由HuffmanCode定义的动态分配的数组HC中,数组的0号单元不使用,从1号单元开始使用。