数据结构课程设计
题目:编制一个可进行传数据编码及接收数据译码的编/译系统
要求:(1)用Huffman树给出Huffman编码;
(2)可单独或小组的形式完成,但至多3人;
(3)写出实验报告,并提交电子文档及源程序。
一、 需求分析:
1、根据用户指定的字符表和频度的实际统计数据建立Huffman树;
2、其中其叶子结点表示字符的权值及父母、左、右孩子等结点的信息;
3、其左右分支分别用代码0、1表示;
4、本系统的目的是为用户提供编/译码系统,根据用户输入的字符依字符集的权值进行编码保存;
5、根据接收到的编码进行译码;
6、输出其内容。
二、测试数据:
(1)、利用教科书(P148)例6-2中的数据调试程序。
(2)、用下表给出的字符集和频度的实际统计数据建立Huffman树,并实现以下报文的编码和译码:“THIS # PROGRAM # IS # MY # FAVORITE”。
字符 # 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
三、 详细设计:
抽象数据类型HuffmanTree的定义如下:
typedef struct
{
char data; //结点字符
int weight; //结点权值
int parent,lchild,rchild; //父子结点
}HTNode,HuffmanTree;
typedef char HuffmanCode;
基本操作P:
CreateHuffmanTree(&HT,);
初始条件:给出HuffmanTree的定义。
操作结果:构造HuffmanTree。
HuffmanCoding(HuffmanTree HT,HuffmanCode &HC)
初始条件:HT存在。
操作结果:得出编码HC。
PrintHuffmanCode(HuffmanTree HT,HuffmanCode HC)
初始条件:HT,HC存在。
操作结果:显示字符与其对应的编码。
g(int)
初始条件:HT,HC存在。
操作结果:从根到叶子遍历树,得出译码。