数据结构 哈夫曼编码实验报告.doc

数据结构 哈夫曼编码实验报告.doc

ID:57089430

大小:2.58 MB

页数:7页

时间:2020-08-01

数据结构 哈夫曼编码实验报告.doc_第1页
数据结构 哈夫曼编码实验报告.doc_第2页
数据结构 哈夫曼编码实验报告.doc_第3页
数据结构 哈夫曼编码实验报告.doc_第4页
数据结构 哈夫曼编码实验报告.doc_第5页
资源描述:

《数据结构 哈夫曼编码实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、实验报告实验课名称:数据结构实验实验名称:文件压缩问题班级:20132012学号:姓名:时间:2015-6-9一、问题描述哈夫曼编码是一种常用的数据压缩技术,对数据文件进行哈夫曼编码可大大缩短文件的传输长度,提高信道利用率及传输效率。要求采用哈夫曼编码原理,统计文本文件中字符出现的词频,以词频作为权值,对文件进行哈夫曼编码以达到压缩文件的目的,再用哈夫曼编码进行译码解压缩。二、数据结构设计首先定义一个结构体:structhead{unsignedcharb;//记录字符longcount;//权重intparent,lch,rch;//定义双亲,左孩

2、子,右孩子charbits[256];//存放哈夫曼编码的数组}header[512],tmp;//头部一要定设置至少512个,因为结点最多可达256,所有结点数最多可达511三、算法设计输入要压缩的文件读文件并计算字符频率根据字符的频率,利用Huffman编码思想创建Huffman树由创建的Huffman树来决定字符对应的编码,进行文件的压缩解码压缩即根据Huffman树进行译码设计流程图如图1.1所示。建立哈夫曼树根据哈夫曼树解码对二进制文件进行解码统计字符,得出统计出字符的权值n根据哈夫曼树编码对编码进行压缩生成哈夫曼树生成对应文件生成二进制文

3、件图1.1设计流程图(1)压缩文件输入一个待压缩的文本文件名称(可带路径)如:D:lulu.txt统计文本文件中各字符的个数作为权值,生成哈夫曼树;将文本文件利用哈夫曼树进行编码,生成压缩文件。压缩文件名称=文本文件名.COD如:D:lulu.COD压缩文件内容=哈夫曼树的核心内容+编码序列for(inti=0;i<256;i++){header[i].count=0;//初始化权重header[i].b=(unsignedchar)i;//初始化字符}ifstreaminfile(infilename,ios::in

4、ios::binary

5、);while(infile.peek()!=EOF){infile.read((char*)&temp,sizeof(unsignedchar));//读入一个字符header[temp].count++;//统计对应结点字符权重flength++;//统计文件长度}infile.close();//关闭文件for(i=0;i<256-1;i++)//对结点进行冒泡排序,权重大的放在上面,编码时效率高for(intj=0;j<256-1-i;j++)if(header[j].count

6、];header[j]=header[j+1];header[j+1]=tmp;}for(i=0;i<256;i++)if(header[i].count==0)break;leafnum=i;//取得哈夫曼树中叶子结点数pointnum=2*leafnum-1;//取得哈夫曼树中总结点数目infile.open(infilename,ios::in

7、ios::binary);//打开待压缩的文件infile.clear();infile.seekg(0);ofstreamoutfile(outfilename,ios::out

8、ios::binar

9、y);//打开压缩后将生成的文件outfile.write((char*)&flength,sizeof(long));//写入原文件长度(2)哈夫曼编码for(i=0;i

10、izeof(unsignedchar));//写入长度的ASCII码if(header[i].count%8==0)bytelen=header[i].count/8;else{bytelen=header[i].count/8+1;strcat(header[i].bits,"0000000");//在编码后面补0,使其最后凑满8的倍数,//超过无妨,可以用bytelen控制好写入字节的长度}for(intj=0;j

11、sizeof(unsignedchar));strcpy(header[i].bits,header[i].

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。