问题解析与解题方法 问题分析: 设计一个哈夫曼编码、译码系统。对一个 ASCII 编码的文本文件中的字符进行哈夫曼编码,生成编码文件;反过来,可将编码文件译码还原为一个文本文件。(1)从文件中读入任意一篇英文短文(文件为 ASCII 编码,扩展名为 txt);(2)统计并输出不同字符在文章中出现的频率(空格、换行、标点等也按字符处理);(3)根据字符频率构造哈夫曼树,并给出每个字符的哈夫曼编码;(4)将文本文件利用哈夫曼树进行编码,存储成压缩文件(编码文件后缀名.huf)(5)用哈夫曼编码来存储文件,并和输入文本文件大小进行比较,计算文件压缩率;(6)进行译码,将 huf 文件译码为 ASCII 编码的 txt 文件,与原 txt 文件进行比较。根据上述过程可以知道该编码译码器的关键在于字符统计和哈夫曼树的创建以与解码。哈夫曼树的理论创建过程如下:一、构成初始集合 对给定的 n 个权值{W1,W2,W3,...,Wi,...,Wn}构成 n 棵二叉树的初始集合F={T1,T2,T3,...,Ti,...,Tn},其中每棵二叉树 Ti 中只有一个权值为 Wi 的根结点,它的左右子树均为空。 二、选取左右子树 在 F 中选取两棵根结点权值最小的树作为新构造的二叉树的左右子树,新二叉树的根结点的权值为其左右子树的根结点的权值之和。 三、删除左右子树 从 F 中删除这两棵树,并把这棵新的二叉树同样以升序排列加入到集合 F 中。 四、重复二和三两步, 重复二和三两步,直到集合 F 中只有一棵二叉树为止。 因此,有如下分析:1. 我们需要一个功能函数对 ASCII 码的初始化并需要一个数组来保存它们;2. 定义代表森林的数组,在创建哈夫曼树的过程当中保存被选中的字符,即给定报文中出现的字符,模拟哈夫曼树选取和删除左右子树的过程;3. 自底而上地创建哈夫曼树,保存根的地址和每个叶节点的地址,即字符的地址,然后自底而上检索,首尾对换调整为哈夫曼树实现哈弗曼编码;4. 从哈弗曼编码文件当中读入字符,根据当前字符为 0 或者 1 的状况访问左子树或者右孩子,实现解码;5. 使用文件读写操作哈夫曼编码和解码结果的写入;解题方法:结构体、数组、类的定义:1. 定义结构体类型的 signode 作为哈夫曼树的节点,定义结构体类型的 hufnode 作为哈夫曼编码对比表的节点,定义 HFM 类实现对哈夫曼树的创建,利用其成员函数完成哈夫曼编码译码的工作。2. 定 义 signode 类 型 的 全 局 数 组 SN[256] ( 为 方...