1、姗隗肆念采用类语言定义相关的数据类型哈夫曼码的编/译系统主要采用的数据结构为树和链表和数组。其中链表是一种物理存储单元上非连续、非顺序的存储结构,它义稻收豢既可以表示线性结构,也可以用于表示非线性结构,结点可以动态生成。而树是包含n(n>0)个结点的有穷集合K,且在K中定义了一个关系N,N满足 以下条件:(1)有且仅有一个结点 K0,他对于关系N来说没有前驱,称K0为树的根结点。简称为根。(2)除K0外,K中的每个结点,对于关系N来说有且仅有一个前驱。(3)K中各结点,对关系N来说可以有m个后继(m>=0)
2、算法设计构造哈夫曼树的算法在哈夫曼树中,没有度为1的结点,这类二叉树称为严格二叉树。那么对于一颗含有n个结点的哈弗曼树共有2n-1个结点所以哈夫曼算法可以用一维数组实现。显然每个结点的存储结构都应该有一个域存放权值;构成Huffman树之后,为求编码需从叶子结点出发走一条从叶子到根的路径,而为译码需从根出发走一条从根到叶子的路径。对每个结点而言,既需知双亲的消息,又需知孩子结点的消息。因此,可设定一个静态三叉链表来实现。
3、函数的调用关系图
4、调试分镙龟陛鹜析(1) 问题1l 问题描述:编码过程中字符串编码总是缺少很多位,甚至不能编码一些字符。l 问题分析:字符串编码总是缺少很多位,说明导致这种情况的可能是节点不够多,致使编码没空间存储。l 解决方法:初始化霍夫曼链表的节点不够,如果假设字符串有n个,那链表节点至少得有2n-1个,比如对4个字符串编码,先在4个字符里选2个权值最小的字符,2个字符权值相加,生成新的一个节点存储,现在还剩3个节点,同理3选2,生成新节点,剩余一个节点最后与上一步生成的节点配对,因此共需要生成3个新节点来存储。
5、测试结果(1)打开源文件统计各字符及权值信息并存入data.txt文件中
6、(2)将统计出的权值信息进行哈夫曼编码
7、(3)将编码内容存入CodeFile.txt文件中
8、(3)将CodeFile.txt文件中的内容译码
9、(5)成功译码把原字符信息存入DeCodeFile.txt文件中