- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构课程设计报告-哈夫曼树
计算机科学学院
数据结构课程设计
题 目:基于哈夫曼树的文件压缩/解压程序
学生姓名:林华
学 号:121345012021
专 业:计算机科学与技术
班 级:12级(2)班
指导教师姓名及职称:陈明 讲师
起止时间: 2014 年 3 月—— 2014 年 4 月
1 需求分析
1.1课题背景及意义
近年来,随着计算机技术的发展,多媒体计算机技术、计算机网络技术以及现代多媒体通信技术正在向着信息化、高速化、智能化迅速发展。各个领域的应用与发展,各个系统的数据量越来越大,给数据的存储、传输以及有效、快速获取信息带来了严重的障碍。数据压缩技术能够比较有效地解决这个问题。
还有在最近几年中兴起的物联网和云计算都是对海量的数据进行处理和传输的,如果不对数据进行压缩,那么数据传输所需的带宽要求就很高,物理成本上也随之上升。所以说数据压缩在计算机通信中占有很重要的位置,且涉及领域多,应用广泛,与我们的生活息息相关。
1.2课题要求
1.2.1.实现一个基于哈夫曼树的文件压缩程序和文件解压程序。
1.2.2.压缩程序能输入源文件进行压缩,输出压缩文件;
1.2.3.解压程序读入压缩文件,根据相应的哈夫曼编码解压还原 ,得到对应的源文件。
1.2.4.可选做:求出压缩率;打印哈夫曼树;对文件夹压缩;图形图形化窗口操作界面。
1.3任务和要求
1.3.1选择1时:
输入一个待压缩的文本文件名称(可带路径)如:D:\\XXX.txt压缩文件名称= D:\\XXX.zip
1.3.2选择2时:
输入一个待解压的压缩文件名称(可带路径)如:D:\\YYY.txt
解压文件名称=
2概要设计
2.1问题解决的思路概述
图1 主程序流程图
2.2 算法思想:
2.2.1输入要压缩的文件
首先运行的时候,用户主界面上有菜单提示该如何使用软件,根据菜单提示选择所要执行的项,依次进行,因为各个环节之间有先后顺序。第一步为输入压缩软件的名称,由键盘输入文件路径和文件名称,读入字符数组中,打开该文件,按照提示进行压缩。若打不开,则继续输入。
2.2.2读文件并计算字符频率
文件将信息存放在字符数组中;计算每个字符出现的次数,申请一个结构体数组空间, 用读取的字符减去字符结束符作为下标记录字符的频率。
2.2.3根据字符的频率,利用Huffman编码思想创建Huffman树
将所记录的字符的频率作为权值来创建Huffman树,依次选择权值最小的两个字符作为左右孩子,其和作为父结点的权值,依次进行下去,直到所有的字符结点都成为叶子结点。
2.2.4由创建的Huffman树来决定字符对应的编码,进行文件的压缩
根据创建的Huffman树来确定个字符的01编码,左孩子为0,右孩子为1。读取文件,依次将每个字符用他们的编码表示,即完成一次编码。
2.2.5解码压缩即根据Huffman树进行译码
读取编码文件,依据创建的Huffman树,定义一个指针指向根结点。从根结点开始,每读一个字符,指针变化一次(当读取的字符是‘1’时,指针指向当前所指结点的右孩子,当读取的字符是‘0’时,指针指向当前所指结点的左孩子),直至该指针所指结点为叶子结点时结束(即当结点的左右孩子均为空时)。将当前叶子结点所代表的字符值输出到译码文件中,依次读取编码文件中的字符,按照上述方法依次进行下去直至文件
2.3数据结构定义
typedef struct node //哈夫曼树结构体
{
long w;//权重
short p,l,r; //定义双亲,左孩子,右孩子
}htnode,*htnp;
typedef struct huffman_code
{
unsigned char len;//记录该结点哈夫曼编码的长度
unsigned char *codestr; //记录该结点的哈夫曼编码
}hufcode;
2.5主程序的流程及模块间关系
主函数实例化huffmanTree类,并实现菜单工具栏,通过用户的选择输入,用switch语句进行分支执行huffmanTree类中功能函数:
1:压缩函数
2:解压函数
并可在完成相应功能后安全退出,压缩或解压的文件在同文件夹下生成。
3. 详细设计
核心算法----huffman算法:
3.1根据给定的n个权值{w1,w2,……,wn}构成n棵二叉树的集合F={T1,T2,……,Tn},其中每棵二叉树T1中只有一个带权的 w1的根据点,其左右子树均空。
3.2在F中选取两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,且置
原创力文档


文档评论(0)