- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验项目指导书_数据结构
《用哈夫曼编码实现文件压缩》
实 验 项 目 指 导 书
《数据结构》实验教学改革课题组
2006年12月
实验题目
用哈夫曼编码实现文件压缩
实验目的
了解文件的概念。
掌握线性链表的插入、删除等算法。
3、掌握Huffman树的概念及构造方法。
4、掌握二叉树的存储结构及遍历算法。
5、利用Huffman树及Huffman编码,掌握实现文件压缩的一般原理。
实验设备及环境
微型计算机、Windows 系列操作系统 、Visual C++6.0软件
实验内容
根据ascii码文件中各ascii字符出现的频率情况创建Haffman树,再将各字符对应的哈夫曼编码写入文件中,实现文件压缩。
实验要求
1、用C语言编程实现上述实验内容中的结构定义和算法。
2、要有main()函数,并且在main()函数中使用检测数据调用上述算法。
3、实验完成后撰写实验报告,实验报告的具体格式参见《实验报告样例》。
4、实验完成后把打印好的实验报告以及电子版的实验报告和源程序一并上交。
实验方法或或步骤
实验的预备知识
(1)构造Hufffman树的方法—Hufffman算法
构造Huffman树步骤:
根据给定的n个权值{w1,w2,……wn},构造n棵只有根结点的二叉树,令起权值为wj。
在森林中选取两棵根结点权值最小的树作左右子树,构造一棵新的二叉树,置新二叉树根结点权值为其左右子树根结点权值之和。
在森林中删除这两棵树,同时将新得到的二叉树加入森林中。
重复上述两步,直到只含一棵树为止,这棵树即哈夫曼树。
(2)Huffman编码:数据通信用的二进制编码
思想:根据字符出现频率编码,使电文总长最短
编码:根据字符出现频率构造Huffman树,然后将树中结点引向其左孩子的分支标“0”,引向其右孩子的分支标“1”;每个字符的编码即为从根到每个叶子的路径上得到的0、1序列。
(3)二叉树的存储结构
typedef struct node
{
datatype data;
struct node *lchild, *rchild;
}BinTree;
实验步骤
启动Visual c++6.0,如图 2-1所示。
图 2-1
(2)鼠标单击“文件”菜单,选择“New”菜单,如图 2-2所示。
图 2-2
(3)、单击鼠标,在出现的“New”对话框中,选择“Projects”标签下的“Win32 Console Application”选项,如图2-3所示。
图2-3
(4)、在“Project name”中输入工程名称,单击“OK”按钮,如图2-4所示。
图2-4
(5)、单击“Finish”按钮,如图2-5所示。
图2-5
(6)、鼠标单击“OK”按钮,完成工程的创建,如图2-6所示。
图2-6
(7)、选择“工程”—〉“添加工程”—〉“New”菜单,如图2-7所示。
图2-7
(8)、单击鼠标,在出现的“New” 对话框中,选择“Files”标签,选择“c++ Source File”选项,在“File”框中输入文件名:“code.c”,单击“OK”按钮,如图2-8所示。
图2-8
(9)、输入代码,如图2-9所示。
图2-9
设计思想
(1)下面给出中实现的Haffman树的结构及创建算法,有两点说明:
这里的Haffman树采用的是基于数组的带左右儿子结点及父结点下标作为存储结点的二叉树形式,这种空间上的消耗带来了算法实现上的便捷。
b) 由于对于最后生成的Haffman树,其所有叶子结点均为从一个内部树扩充出去的,所以,当外部叶子结点数为m个时,内部结点数为m-1,整个Haffman树的需要的结点数为2m-1。
/*Code1: Haffman Algorithm*/
#define MAXCHAR 30000
#define MAXNODE 300
#define MAXNUM 150
#define InfoType char
struct HtNode
{
EBTreeType ww;
char info;
int parentIndex;
int llinkIndex;
int rlinkIndex;
};
struct HtTree
{
struct HtNode ht[MAXNODE];
int rootIndex;
};
typedef struct HtTree* PHtTree;
PHtTree haffmanAlgorithm(int m,EBTreeType* w)
{
PHtTree pht;
int i,j;
int firstMinIndex,secondMinIndex;
int firs
您可能关注的文档
最近下载
- resform使用说明.doc
- 丙烯酸乳液标准文本.pdf VIP
- 《劳动权益保护法规》课件.ppt VIP
- 要素式强制执行申请书(申请执行用).docx VIP
- GEOMETRICAL OPTICS AND OPTICAL DESIGN (几何光学和光学设计).PDF VIP
- T_CSTE 0001—2021_污(废)水处理用碳源.pdf VIP
- 赣科技版信息科技七年级上册 第6课《网络创新应用》第2课时 教案.doc VIP
- 大型齿轮渐开线齿形误差在位测量仪(测控第一大组课程设计报告).docx VIP
- 人工智能助力文化创意产业增长分析报告.docx VIP
- 杉木人工林抚育经营技术规程.pdf VIP
原创力文档


文档评论(0)