C语言课程设计-文件的哈夫曼编码与解码

文件的哈夫曼编码与解码

编码过程中,踩了一些小坑,做下记录:

  • 1.全局变量countstd:count矛盾,建议用其他变量名。
  • 2.内存泄漏问题 注意空间要开够 指针不可越界 main函数内开辟的栈空间大小一般为8MB 若要开辟较大的数组 请去main函数之外
  • 3.编译器错误 推荐大家使用教新的较稳定的编译器
  • 4.文件操作 打开后记得关闭 否则会占用系统资源
  • 5.申请完空间,要记得释放,养成习惯。释放函数不可张冠李戴(留心编译器的Warning)。malloc/free,new/delete要配对使用。具体原因可参考 这篇文章

编码要求及任务:

准备一个字符文件,要求:

  1. 统计该文件中各种字符的频率
  2. 对各字符进行 Huffman编码,显示每个字符的编码
  3. 以及将该文件翻译成 Huffman编码文件
  4. 再将 Huffman编码文件翻译成源文件
  5. 显示每个字符以一个字节进行二进制编码后的编码文件

实现步骤可分为:

  1. 统计被编码文件中个字符出现的频数,即统计权重
  2. 根据权重,构造哈夫曼树,进行哈夫曼编码
  3. 读取文件进行二进制编码
  4. 读取文件,将每个字符匹配哈夫曼编码,写入新文件,即完成编码
  5. 读取编码文件,根据哈夫曼编码进行解码,并写入新文件
  6. 对比二进制编码和哈夫曼编码后的文件字节大小,并计算压缩率
首先,准备一个源文件

这里我准备了一首小诗,写入文件,并将其命名为poem.txt

If I could save time in a bottle
the first thing that I'd like to do
is to save every day until eternity passes away
just to spend them with you
if I could make days last forever
if words could make wishes come true
I'd save every day like a treasure and then
again I would spend them with you
构建哈夫曼节点
// 定义哈夫曼树节点
typedef struct {
	int we
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值