欢迎来到天天文库
浏览记录
ID:58427999
大小:244.00 KB
页数:10页
时间:2020-09-03
《实验报告格式样例.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《用哈夫曼编码实现文件压缩》实验报告课程名称数据结构A实验学期2016至2017学年第二学期学生所在系部管理学院年级2015专业班级电商B15学生姓名学号任课教师兰芸成绩评定:1、工作量:A(),B(),C(),D(),F()2、难易度:A(),B(),C(),D(),F()3、答辩情况:基本操作:A(),B(),C(),D(),F()代码理解:A(),B(),C(),D(),F()4、报告规范度:A(),B(),C(),D(),F()5、学习态度:A(),B(),C(),D(),F()总评成绩:___________________________实验题目:哈夫曼编码实现
2、文件压缩一、实验目的:1.了解文件的概念。2.掌握线性链表的插入.删除等算法。3.掌握Huffman的概念及构造方法。4.掌握二叉树的存储结构及遍历算法。5.利用Huffman树及Huffman编码,掌握实现文件压缩的一般原理。三、实验设备与环境:微型计算机·Windows系列的操作系统·VisualC++6.0软件四、实验内容:根据ascii码文件中各ascii字符出现的频率情况创建Huffman树,再将各字符对应的哈夫曼编码写入文件中,实现文件压缩。删去,根据自己完成内容来写五、概要设计:此程序就是用MicrosoftVisualC++编写的。根据ascii码文件中各a
3、scii字符出现的频率情况创建Haffman树,再将各字符对应的哈夫曼编码写入文件中。首先是对赫夫曼树进行定义,然后编写各个子函数,最后通过主函数对子函数的调用来实现程序的功能,其中用到了关于文本读入、挑选权值最小的字符、赫夫曼编码、建立赫夫曼树等的子函数。通过读入的文本,对每个字符出现的次数进行统计,让后通过挑选函数,挑选权值最小的字符通过编码函数进行编码,然后把赫夫曼树的左右孩子分别赋值0、1;用这两个数字来表示各个字符,求出各个字符的二进制编码并把字符的二进制码存入文本中,便实现了压缩功能。删去,自己写图见下页:主要结构图如下:主函数读取输出输出压缩后的文件,输出每个
4、字符的权重值,左右孩子节点以及对应的二进制编码把赫夫曼树转成二进制数字利用c中函数fopen()打开一个文档把二进制编码输出,并计算文件计算读取文件的每个字符的权值及文件的长度把压缩后的文件存入一个新的*.txt文档中根据各个字符的权值建立赫夫曼树输出赫夫曼树六、详细设计:下面内容删去自己写<1>赫夫曼树的结构体的定义,其中包括权值、父母、左右孩子及要编码的字符。用这个结构体定义个赫夫曼数组。定义如下:structnode{longweight;//权值unsignedcharch;//字符intparent,lchild,rchild;charcode[256];//编码
5、的位数最多为256位intCodeLength;//编码长度}hfmnode[512];<2>读入文档,并计算其中出现的字符以及每个字符的权值,并统计文档中所有的字符个数:printf("请输入要压缩的文件名:");scanf("%s",infile);ifp=fopen(infile,"rb");if(ifp==NULL){printf("文件名输入错误,文件不存在!");return;}printf("请输入目标文件名:");scanf("%s",outfile);ofp=fopen(outfile,"wb");if(ofp==NULL){printf("文件名输入
6、错误,文件不存在!");return;}start1=clock();//开始计时1//统计文件中字符的种类以及各类字符的个数//先用字符的ASCII码值代替结点下标FileLength=0;while(!feof(ifp))//用来统计读入的文件长度以及每个出现字符的权值{fread(&c,1,1,ifp);//一个流中读取数据hfmnode[c].weight++;FileLength++;}<3>初始化赫夫曼树,计算赫夫曼树的节点数,把左右孩子,双亲指针都定义成—1:for(i=0;i<256;i++)if(hfmnode[i].weight!=0){hfmnod
7、e[i].ch=(unsignedchar)i;n++;//叶子数hfmnode[i].lchild=hfmnode[i].rchild=hfmnode[i].parent=-1;}m=2*n-1;//哈弗曼树结点总数j=0;for(i=0;i<256;i++)//去掉权值为0的结点if(hfmnode[i].weight!=0){hfmnode[j]=hfmnode[i];j++;}for(i=n;i
此文档下载收益归作者所有