目录

前言

相关说明

相关知识点

代码测试

编码系统

运行结果

运行后生成的文件

译码系统

运行结果​编辑

写入的文件

其他测试

打开输出Huffman树的开关

打开写入元素编码并打印相关的开关


前言

这篇博客主要分享介绍我写的Huffman树的编码和译码系统,我写好的代码已经打包上传了,感兴趣的小伙伴可以下载玩一玩,还挺有意思的。

Huffman编码就是靠字符出现的频次作为权值构建Huffman树,然后通过左右分支形成编码,相关知识点我也放上了我讲这一块知识点的相关博客。

相关说明

作者:李宗霖
日期:2023年05月28日
两个头文件:"enhuffman.h" "dehuffman.h" 
两个源文件:"enhuffman.c" "dehuffman.c"

enhuffman:Huffman编码
dnhuffman:Huffman译码

【注意】
1.我将访问的文件名以宏定义的方式放在源文件内,可以自行修改
默认:    读取huffman_test_file.txt        ---> 编码 --->    生成huffman_encoding_file.txt
        读取huffman_encoding_file.txt ---> 译码 --->     生成huffman_decoding_file.txt
2.我将一些测试健壮性的开关宏设置在了开头,方便调试程序可以自行打开关闭
3.    void LookupDeFile();    是dnhuffman程序入口,剩下的方法都是在这个函数内被调用
    void ReadFile();        是enhuffman程序入口,剩下的方法都是在这个函数内被调用
4.enhuffman采用顺序存储,构造使用的是我自己优化后的索引查找
5.dehuffman采用链式结构,构造是用先序遍历

相关知识点

在我的这篇博客里面介绍了最基本的Huffman树的相关操作:

数据结构 实验17:Huffman树和Huffman编码——学习理解哈夫曼树_Leisure_水中鱼的博客_CSDN博客

我的这一篇博客讲解了我对课本上顺序存储构造Huffman树方法的优化:

数据结构 深度学习索引结构——用索引算法优化课本哈夫曼树的构造算法_Leisure_水中鱼的博客_CSDN博客

代码测试

因为我两个头文件都是写好的,我也设置了相应的调用入口,主函数简单的写了个测试:

#include <stdio.h>
#include <stdlib.h>
#include "dehuffman.h"
#include "enhuffman.h"int main() {printf("输入以下字符进行操作:\n");printf("'1':编码\n'2':译码\n'0':结束\n"); char c;while (1) {printf("\nEnter: ");scanf(" %c", &c);if (c == '0') {break;}else if (c == '1') {ReadFile();           //调用编码 }else if (c == '2') {LookupDeFile();     //调用译码 }} printf("\n----------Bye Bye----------\n");return 0;
}

编码系统

这个是提前准备好的装有数据的txt文档,是网上随便复制的一篇作文,和随便打的一些字符:

为了方便调试我定义了一些开关,这是编码相关的开关:

//定义一些开关 0为关,1为开
#define LOOP_checkEnFileExists 1    //检测将生成文件的名是否存在,若是存在提问是否覆盖文件
#define LOOP_printHuffman 0         //是否在屏幕上打印创建出的哈夫曼树,打印后立即结束程序
#define LOOP_printFileEncoding 0    //是否在屏幕上打印出文件编码
#define LOOP_writeElemCode 0        //是否在文件中写入各个元素的编码
#define LOOP_printElemCode 0        //在写入元素编码开关打开的前提下是否在屏幕上打印 

运行结果

运行后生成的文件

译码系统

定义的译码相关的开关:

//定义一些开关 0为关,1为开
#define LOOP_checkDeFileExists 1    //检测将生成文件的名是否存在,若是存在提问是否覆盖文件
#define LOOP_printFileDecoding 1    //是否在屏幕上打印文件译码后的内容 

运行结果

写入的文件

其他测试

打开输出Huffman树的开关

0内存单元存的是根节点,双亲中存的是叶子结点数量。

打开写入元素编码并打印相关的开关

数据结构:Huffman编码/译码系统相关推荐

  1. Huffman编码/译码问题

    Huffman编码/译码 问题描述 利用哈夫曼编码进行信息通讯可以大大提高信道利用率,缩短信息传输时间,降低传输成本.但是,这要求在发送端通过一个编码系统对待传数据预先编码:在接收端将传来的数据进行译 ...

  2. 哈夫曼编码 译码java_基于Java的哈夫曼编码译码系统_报告毕业论文

    基于Java的哈夫曼编码译码系统_报告毕业论文 1课 程 设 计Java 与面向对象程序设计课程设计基于 Java 的哈夫曼编码译码系统1.问题描述和分工情况1.1 问题描述使用 Java 语言实现哈 ...

  3. 二叉树的基本操作及哈夫曼编码/译码系统的实现

    二叉树的基本操作及哈夫曼编码/译码系统的实现 实验目的和要求 掌握二叉树的二叉链表存储表示及遍历操作实现方法. 实现二叉树遍历运算的应用:求二叉树中叶结点个数.结点总数.二叉树的高度,交换二叉树的左右 ...

  4. 数据结构c语言哈夫曼编码译码系统,数据结构C语言哈夫曼编码译码

    <数据结构C语言哈夫曼编码译码>由会员分享,可在线阅读,更多相关<数据结构C语言哈夫曼编码译码(16页珍藏版)>请在人人文库网上搜索. 1.实训报告题 目: 哈夫曼树编码译码院 ...

  5. 夫曼编码译码系统课程设计实验报告(含源代码c++_c语言),哈夫曼编码译码系统课程设计实验报告(含源代码C++_C语言)[1]...

    目 录 摘 要 ---------------------------..------ II Abstract ----------------------------..---... II 第一章 ...

  6. 哈夫曼编码/译码器:设计一个哈夫曼编码/译码系统,对一个文本文件中的字符进行哈夫曼编码,生成编码文件;反过来,可将一个编码文件译码还原为一个文本文件(.txt)。要求:① 输入一个待压缩的文本文件名

    目录 1.实验题目 2.概要设计 2.1 问题分析 2.2 流程图 2.3 功能模块 3.详

  7. 实验三Huffman编码与解码

    一.实验原理 Huffman编码实现的数据结构 Huffman编码为可变长编码,若各码字长度按照所对应符号出现概率的大小逆序排列,则其平均长度最小. 编码步骤: 1.将信源符号按照出现概率由大到小的顺 ...

  8. 数据结构课程设计报告——Huffman编码

    目录 一. 问题描述与要求 二. 需求分析 三. 设计 3.1 设计思想 3.1.1 数据与操作的特性 3.1.2 数据结构设计 3.1.3 算法设计 3.2 设计表示 3.2.1 函数调用关系图 3 ...

  9. huffman图像编码C语言,Huffman编码 数据结构 C语言

    为解决广大童鞋的数据结构实验问题写下本文:(只做参考哦.) 实验要求: Huffman编码(二叉树) l实验目的:熟练掌握二叉树应用(Huffman编码)的基本算法实现. l实现功能:对输入的一串电文 ...

最新文章

  1. 值得安利!8款windows神级软件,真解决了不少痛点啊!
  2. 注意力机制~Attention Mechanism
  3. hαbits的意思_hαppy什么么意思
  4. Party at Hali-Bula(树形DP+判断方案数是否唯一)
  5. Jar包转成Dll的方式(带嵌套的jar也能做) (转)
  6. c语言创建新指针,如何用c语言创建一个指针
  7. HDU5322 - cdq分治FFT加速dp
  8. linux6添加chkconfig管理,10、14 Linux系统服务管理工具-chkconfig
  9. win10编辑js文件报错,错误','
  10. virtualbox linux 挂载u盘,Ubuntu 10.04 在Virtualbox 虚拟机上挂载U盘
  11. Python程序-离散和线性图形
  12. linkedhashmap遍历_Java集合:浅谈LinkedHashMap、LinkedHashSet源码及LRU算法实现
  13. php 返回script,从PHP脚本返回JSON
  14. 017指北与游移方位惯导系统知识梳理
  15. WebService接口开发和调用
  16. Visual Studio 2017各版本安装包离线下载、安装全解析
  17. 小程序开发合同_如何开发微信小程序?
  18. android 7.1 字体大小设置,微信安卓版7.0.4字体大小被吐槽,微信官方回应又被吐槽...
  19. 或操作(||)和与操作()的执行顺序以及返回结果
  20. 中国海外文物拍卖天价

热门文章

  1. MATLABsimulink对于软件无线电设计的支持
  2. Vue|自定义组件库组件“前缀“咋定义?
  3. 如何构建标签和画像体系,助力零售企业数据化转型
  4. 互联网早报:字节跳动布局新消费:将推出香水品牌“Emotif”;闲鱼上线“校园圈”频道
  5. 【独孤一狼-诗歌精选】 梦
  6. Jetson nano查看自带的opencv版本
  7. 已报参加2021阿里云峰会—开发者大会,29号有组队的吗?
  8. Excel函数实现腾讯在线文档Excel会员功能——标记重复值
  9. ultraos win10启动盘_用UltraISO把Win10 ISO镜像写入U盘制作系统安装盘
  10. 购买内存条该注意哪些事项