- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构实验报告
姓名: XX
专业: 计算机科学与技术班级: 104304XXX
学号: 104304XXX
指导老师:孙界平
日期: 2010 年 XXXXXX
一、实验题目:
Huffman 编码(二叉树应用)
二、实验的目的和要求
要求对文件进行 Huffman 编码的算法,以及对一编码文件进行解码的算法
熟练掌握二叉树的应用;具体要求如下
统计:
2) 构 造 Huffman 树
(3) 在左分枝标 0,右分枝标 1:
4) 确定 Huffman 编码
三、实验的环境:
MicrosoftVisualc++2010
四、算法描述:
1首先给出路径和路径长度的定义:
从树的一个结点到另一个结点之间的分支构成这两点之间的路径 ,路径上的分支数目叫路径长度,树的路径长度为从根到每一个结点的路径长度之和。
带权路径长度:为该结点到跟的路径长度和结点上权的乘积。
树的带权路径:根到每一个结点的路径长度和结点上权的乘积之和。其中带权路径长度 WPL 最小的二叉树称为最优二叉树或赫夫曼树.
2先根据输入确定每一个字符的总数 m 和其出现的次数 wi(即权值),然后根据这 m 个权值构成 m 棵二叉树集合 F,其中每一棵二叉树 Ti 中只有一个带权为 wi 的根结点,且根结点的权值为 wi;
3在 F 中殉难区两棵权值最小的书作为左右子树根结点权值之和;
4在 F 中删除这两棵树,同时将新得到的二叉树加入 F 中;
5重复(2)和(3),直到 F 中只含一棵树为止
五、源程序清单:
包含三个文件
hfclass.h
//
类的建立
hfclass.cpp
//
类的方法实现
hf.cpp
//
运行主函数
hf.cpp //主函数入口
#includehfclass.h #includeiostream usingnamespacestd; voiddealSStr(vectorcharstr)
{
charcc; charc;
CdealStrdealstr; while(1)
{
cout编码 B 译码 Y 返回 Fendl; c=getchar();getchar();
if(c==F) break; else
{
cout输入字符串endl;str.clear();
while(1){
cc=getchar(); if(cc==\n)
break; str.push_back(cc);
}
}
if(c==B){
dealstr.setStr(str); dealstr.dealStr();
}
else
{
dealstr.dealStrTraslate(str);
}
}
}
voiddealFFile()
{
charc; charinfile[100]; charoutfile[100]; charkeyfile[100]; CdealFilepq; while(1){
cout编码 Y 解码 N 查看文件 C 文件编码退出 Eendl; c=getchar();
if(c==Y){
cout操作对象地址 输出文件地址 钥匙文件地址endl;
cininfileoutfilekeyfile; pq.dealFileIn(infile,outfile,keyfile); //编码
}
elseif(c==N)
{
cout操作对象地址 输出文件地址 钥匙文件地址endl; cininfileoutfilekeyfile; pq.dealFileOut(infile,outfile,keyfile); //解码
}
elseif(c==C)
{
}
else
cout输入文件地址产看地址endl; cininfile;
pq.chakeFile(infile);
break;
}
}
intmain()
{
cout处理文件 F..处理字符串 Sendl; charc;
c=getchar(); while(c==F||c==S)
{
getchar();
vectorcharstr; if(c==S)
{
dealSStr(str);
}
else
{
dealFFile();
}
system(cls); getchar();
cout文件编码 F..字符串编码 Sendl; c=getchar();
}
}
hfclass.h //相关类的声明
#ifndefHFCLASS #defineHFCLASS #includeiostream #includefstream #includecstdio #includecstring #includemap #includecstdlib #includestring #includestack #includevector usingnamespacestd; s
文档评论(0)