- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
《数据结构c》
课程设计报告
一.课程设计概述
本次数据结构课程设计共完成5个题目:成
绩分析问题,哈夫曼编码器,迷宫问题,八
皇后问题,农夫过河问题的求解。
使用环境:C语言。
编译环境:VisualStudio2022。
实验内容:
哈夫曼编码器
问题描述:
设计并实现一个哈夫曼码的编译码系统
需求分析:
初始化:从终端读入字符集大小n,及n个
字符和m个权值,建立哈夫曼树,并将其保
存在磁盘huffman文件中
编码:利用已建好的哈夫曼树对待发送电文
(读取来自文件tobetrans.dat)进行编码,然
后将结果保存在磁盘文件codefile中。
解码:利用已建好的哈夫曼树,对文件
codefile中代码进行译码,结果存入文件
textfile中。
打印代码文件:将文件codefile显示在终端
上,每行50个代码,同时将此字符形式的
编码文件写入文件codefile中。
概要设计:
--=ADT=--
{
intread_input(HuffNodenodes[])输入字符集及其权值
voidinit_tree(HuffTreetree[],intn)初始化哈夫曼树
voidbuild_tree(HuffTreetree[],HuffNodenodes[],intn)建立哈夫
曼树
voidget_code(HuffTreetree[],HuffNodenodes[],intn)获取哈夫
曼编码
voidencode_file(HuffNodenodes[],intn,char*filename)编码文件
voiddecode_file(HuffTreetree[],HuffNodenodes[],intn,char*
infile,char*outfile)解码文件
}
存储结构:
//结构体:哈夫曼树节点
typedefstruct{
charch;//字符
intweight;//权值
charcode[CODE_MAX_LEN];//编码
}HuffNode;
//结构体:哈夫曼树
typedefstruct{
intlchild,rchild,parent;//左子树、右子树、父节
点位置
intweight;//权值
}HuffTree;
设计思路:
该代码实现了哈夫曼编码和解码的功能。下面是代码的设计思路
和关键算法:
1.结构体的定义:
-HuffNode:保存字符、权值以及编码。
-HuffTree:保存哈夫曼树节点的信息,包括左子树、右子
树、父节点位置和权值。
2.read_input函数:用于读取字符集及其权值。
-从用户输入中获取字符集的大小n。
-循环n次,读取每个字符和对应的权值,并保存到HuffNode
数组中。
3.init_tree函数:用于初始化哈夫曼树。
-遍历HuffTree数组,将每个节点的成员变量初始化为默认
值(-1或0)。
4.build_tree函数:用于构建哈夫曼树。
-首先将叶子节点的权值初始化为对应字符的权值。
-循环n-1次,每次找到权值最小和次小的两个节点,并合
并它们构成新的节点。
-将新节点的父节点设置为n+i,左子树和右子树分别设置
为权值最小和次小的节点。
-更新新节点的权值为合并后的权值。
5.get_code函数:用于获取哈夫曼编码。
-从根节点开始,向下遍历每个叶子节点,生成对应叶子节
点的编码。
-编码的生成通过从叶子节点往上遍历,如果该节点为左子
树,则编码为0,否则为1。
-将编码保存到对应的HuffNode节点的code数组中。
6.encode_file函数:用于编码文件。
-打开输入文件和输出文件。
-
文档评论(0)