数据结构实验三——Huffman编码(二叉树应用).docxVIP

  • 6
  • 0
  • 约8.86千字
  • 约 20页
  • 2021-10-18 发布于浙江
  • 举报

数据结构实验三——Huffman编码(二叉树应用).docx

四川大学计算机学院 多媒体课程实验报告 ? ? 实验名称:Huffman编码(二叉树应用) 指导教师: 沈琳 姓名:侯静 学号:0943041267 班级日期:2010.12.10 一、实验号题目: Huffman编码(二叉树应用) 实验的目的和要求: 要求对文件进行Huffman编码的算法,以及对乙编码文件进行解码的算法,为简单起见,可以假设文件是存放在一个字符向量; 熟练掌握二叉树的应用; 熟练掌握计算机系统的基本操作方法,了解如何编辑、编译、链接和运行一个C++程序及二叉树上的基本运算; 具体要求如下: 最小冗余码/哈夫曼码 ● ASCII码/定长码 ab12:0110001000110010 97 98 49 50 ● 哈夫曼码/不定长码 能按字符的使用频度,使文本代码的总长度具有最小 值。 例. 给定有18个字符组成的文本: A A D A T A R A E F R T A A F T E R 字 符 A D E F T R 频 度 7 1 2 2 3 3 求各字符的哈夫曼码。 (1) 统计: (2) 构造Huffman树: (2) 构造Huffman树: (3) 在左分枝标0,右分枝标1: (4) 确定Huffman编码: 字 符 A D E F T R 频 度 7 1 2 2 3 3 编 码 0 1010 1011 100 110 111 特点:任一编码不是其它编码的前缀 例. 给定代码序列: 0 0 1 0 0 0 1 1 1 0 1 0 1 0 1 0 1 1 1 10 文本为:A A F A R A D E T 上机调试程序,掌握查错、排错使程序能正确运行。 三、实验的环境: 1.硬件环境: intel core i5 460处理器,2G内存 2.软件环境:windows 7,Visual Studio 2010 Ultimate 四、算法描述: 1.主函数流程图 2.函数Code()流程图 CreatFromSourceFile( ) CreatFromSourceFile( ) 3.函数UnCode()流程图 五、源程序清单: Huffman.h const unsigned int n=256; //字符数 const unsigned int m=256*2-1; //结点总数 struct HTNode{ //压缩用Huffman树结点 unsigned long weight; //字符频度(权值) unsigned int parent,lchild,rchild; }; struct Buffer{ //字节缓冲压缩用Huffman树 char ch; //字节 unsigned int bits; //实际比特数 }; class HuffmanTree{ //Huffman树 public: void Code(); //编码 void UnCode(); //译码 private: HTNode HT[m+1]; //树结点表(HT[1]到HT[m]) char Leaf[n+1]; //叶结点对应字符(leaf[1]到leaf[n]) char *HuffmanCode[n+1]; //叶结点对应编码(*HuffmanCode[1]到*HuffmanCode[n]) unsigned int count; //频度大于零的字符数 unsigned int char_index[n]; //字符对应在树结点表的下标(char_index[0]到char_index[n-1]) unsigned long size; //被压缩文件长度 FILE *infp,*outfp; //输入/出文件 Buffer buf; //字符缓冲 void Stat(); //统计字符出现频度并过滤掉频度为零的字符 //在HT[0]~HT[k]中选择parent为-1,树值最小的两个结点s1,s2 void Select(unsigned int k

文档评论(0)

1亿VIP精品文档

相关文档