- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构实验四(哈弗曼编码).
数据结构实验四实验报告
实验名称:哈弗曼编码
姓名:黄州龙 班级:08级软件工程A班 学号:082512102
需求分析
本实验涉及的算法思想是最优二叉树的构建,而该算法思想的实际应用广泛,哈弗曼编码就是这一算法的应用,通过本实验的练习,可以加深学生对二叉树的理解,学习如何将算法学以致用,并为以后应用中有所突破奠定基础;
实验程序是通过用户输入的哈弗曼编码频度表文件(.txt)路径,从硬盘中读取数据,并进一步使用哈弗曼编码算法进行哈弗曼树的构建,最后输出编码结果给用户,也可以选择将哈弗曼树存入文件保存起来;
实验程序可以实现对已知频度的码值进行编码的功能,具有一定的使用价值,编写的函数算法是完全可以被用在其他的软件程序中的,具有很好的代码复用性;
存储编码频度表的文件的结构:
首行是一个正整数N,表示有N个码
第二行是N个以空格隔开的字符,即N个码的码值,第三行是N个用空格隔开的非负整数,对应N个码值的频度;
测试数据;
huffman1.txt
文件内容:
8
A B C D E F G H
12 50 52 60 34 80 21 4
huffman2.txt
文件内容:
6
V P K L Y M
20 10 30 40 60 40
huffman3.txt
文件内容:
26
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
huffman4.txt
文件内容:
9
I A M Z E P H Y R
9 8 7 6 5 4 3 2 1
概要设计
1、二叉链结点的定义
struct TreeNode
{
char data;//数据域,具体应用时可能是别的类型
int visit;//当前的访问状态
TreeNode * l;//左树域
TreeNode * r;//右树域
};//end of definition to TreeNode
2、创建森林和创建哈弗曼树模块
Status createForest(vectorTreeNode * forest,string filename)初始条件:filename所指示的文件路径有效且文件内容符合格 式要求
参数:第一个参数传入用来存放每个码结点的地址的向量,第二个参数传入编码频度表文件的路径字符串
操作结果:从文件中读取数据并构建出码值二叉森林,为哈弗曼编码算法做准备
Status createHuffman(vectorTreeNode * forest)
初始条件:传入的码值森林已经初始化
参数:第一个参数传入码值森林所初始化的向量
操作结果:码值森林只剩一个结点,该结点是哈弗曼树的根结点
3、输出哈弗曼编码和输出哈弗曼树模块
void printHuffmanCode(TreeNode * root)
初始条件:传入的树根结点是有效的树根结点
参数:第一个参数传入哈弗曼树的根结点
操作结果:输出每个码值对应的哈弗曼编码
printTree(TreeNode * tn,int depth)
初始条件:传入的二叉树的根是有效的,传入的二叉树深度与二叉树相对应
参数:第一个参数传入要进行树形输出的二叉树的根结点
第二个根结点传入二叉树的深度
操作结果;将二叉树以树状进行输出,比较直观
详细设计
1、创建森林和创建哈弗曼树模块
Status createForest(vectorTreeNode * forest,string filename)
{
ifstream is(filename.c_str());//从路径字符串初始化文//件流
cout从文件中读取编码频度表......\n;//提示以开始//读取
int codenum=0;
TreeNode *code=NULL;
iscodenum;//读取码数
cout有codenum个编码.\n;
for(int i=0;icodenum;i++)//根据结点数一次读入码值数//据并以此创建结点森林
{
code=new TreeNode;
if(!code)//创建结点,若失败则返回错误
return ERROR;
iscode-data;
while(code-dataA||code-dataZ)
iscode-data;
code-l=NULL;
code-r=NUL
您可能关注的文档
最近下载
- 2025届高考英语长难句分析课件.pptx
- 2023部编新人教版五年级(上册)道德与法治全册教案.doc VIP
- 水土保持单元工程施工质量检验表与验收表(样表:2混凝土工程)(SLT 336—2025)水土保持工程质量验收与评价规范.docx VIP
- 玻璃板液位计介绍.pptx VIP
- 国家计委“计价格[2002]1980号文”.doc VIP
- 特种工程塑料——PEEK .ppt VIP
- 三国志曹操传宝物全拿攻略.doc VIP
- 卫星气象学课件:第3章 卫星遥感辐射基础.ppt VIP
- 2025年部编新人教版五年级上册道德与法治全册教案资料.doc VIP
- 1正确认识广告教学设计.docx VIP
文档评论(0)