资源描述:
《哈弗曼实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、华北科技学院计算机系综合性实验报告华北科技学院计算机系综合性实验实验报告课程名称数据结构实验学期2009至2010学年第二学期学生所在系部计算机系年级2008级专业班级信管B081学生姓名XX学号任课教师实验成绩计算机系制第22页华北科技学院计算机系综合性实验报告《数据结构》课程综合性实验报告开课实验室:基础一2010年6月22日实验题目用哈弗曼编码实现文件压缩一、实验目的1、了解文件的概念。2、掌握线性链表的插入、删除等算法。3、掌握Huffman树的概念及构造方法。4、掌握二叉树的存储结构及遍历算法。5、利用Huffma
2、n树及Huffman编码,掌握实现文件压缩的一般原理二、设备与环境微型计算机、Windows系列操作系统、VisualC++6.0软件三、实验内容根据ascii码文件中各ascii字符出现的频率情况创建Haffman树,再将各字符对应的哈夫曼编码写入文件中,实现文件压缩。四、实验结果及分析1.主要结构图主函数统计字符,得出统计出的字符的权值n编码解码退出根据权值进行建立哈夫曼树输出哈夫曼树输出编码压缩编码生成二进制文件解压生成新的文本文档2、主要函数功能FileRead(intcount[],chars[],charfile
3、name[])压缩文档存在。对该文档进行读取,求其所有出现的字符和字符的权值。CreateHuffmanTree(HTreeT,intN,intcount[],chars[])第22页华北科技学院计算机系综合性实验报告以求得该文档的字符和权值。建立Huffman树。HuffmanCoding(HTreeT,HCodeH,intN,chars[])求各个字符的Huffman编码。FilePrint(HTreeT,HCodeH,intN)求得Huffman编码以及各节点的权值。将求得的数据分别存放在HuffmanCode.txt
4、、Char.txt、Weight.txt中。FileWrite(HCodeH,intN,charfilename[])求得Huffman编码以及各节点的权值。将文档翻译成Huffman编码以字符形式存放在File.txt中。FileConvert(void)File.txt存在。将字符形式的Huffman编码翻译成二进制形式,每首季8比特就通过位操作合并成一个字节写入文件code.txt中,最后不足8位时将最后的几位存放在Tail.txt中。FileRead(HTreeT,HCodeH)压缩生成的HuffmanCode.tx
5、t、Char.txt、Weight.txt存在。读取字符及其权值和其Huffman编码。FileExtract(void)压缩结果文件Code.txt和tail.txt存在。将code.txt和tail.txt中的字符写成编码的二进制字符形式,写进file00.txt。FileTrans(HTreeT,HCodeH,intN)已生成File00,txt并已求得各个字符的Huffman编码,Huffman树已建立。:将Huffman编码翻译成原文件,写入translated.txt。还需要包含调用若干库文件:stdio.h,m
6、alloc.h,string.h。1、实验步骤进入主界面第22页华北科技学院计算机系综合性实验报告输出编码第22页华北科技学院计算机系综合性实验报告运行完毕处理结果如下:该文本文件保存的是测试文件中出现的字符以及相应的权值第22页华北科技学院计算机系综合性实验报告字母对应的权值,保存在Weight.txt第22页华北科技学院计算机系综合性实验报告测试文件pp.txt第22页华北科技学院计算机系综合性实验报告编码压缩以后保存在code文本文件里第22页华北科技学院计算机系综合性实验报告对应字符哈夫曼编码压缩文件第22页华北科技
7、学院计算机系综合性实验报告第22页华北科技学院计算机系综合性实验报告根据huffman编码解压后的结果保存在TranslatedFile.txt里面1、主要思想生成Huffman树函数选取字符中权值最小的两个节点建树,将权值相加放在根节点中,将原节点删除,新节点放入数组。递归进行上述操作直到数组中只有一个节点为止。第22页华北科技学院计算机系综合性实验报告•算法如下:•2、建立哈夫曼树•构造哈夫曼数时,首先将n个权值的叶子结点存放到数组huffTree[2*num]的前n个分量中,然后不断的将两棵子树合并为一棵子树,并将新子
8、树的根结点顺序存放到数组huffTree[2*num]的前n个分量的后面。设n个叶子的权值保存在数组cnt[n]中,哈夫曼树的存储主要是利用数组存储伪代码描述为:•1.数组哈夫曼树HuffmanTree初始化,所有元素结点的双亲、左右孩子都置为0;•2.数组哈夫曼树HuffmanTree的