c语言递归计算哈夫曼编码,哈夫曼树遍历求WPL和哈夫曼编码C语言--For初学者
这篇文章使用纯c来写的,实现了生成哈夫曼树、求WPL和生成哈夫曼编码的应用,思路是,先定义一个结构体如下
typedef struct node
{
int weight;
struct node *lchild,*rchild;
struct node *next;
}HuffNode;
先生成单链表(用next链接),还存储输入的权值(weight),单链表无头结点(因为最后要转化成二叉树,所以不用头结点),而且每一次节点的插入都使单链表保持递增的状态(为生成哈夫曼树做准备)。
计算WPL用到简单的递归,如下
int CalcWPL(HuffNode *huff,int wpl)
{
HuffNode *p = huff;
if(!p)
return 0;
else
{
if(!p->rchild&&!p->rchild)
return p -> weight*wpl;
else
return CalcWPL(p->lchild,wpl+1) + CalcWPL(p->rchild,wpl+1);
}
}
在计算WPL的代码上,稍作改动,就可以生成哈夫曼编码,如下
void HuffCode(HuffNode *huff,int len)
{
HuffNode *p = huff;
static int a[MAX];
c语言递归计算哈夫曼编码,哈夫曼树遍历求WPL和哈夫曼编码C语言--For初学者相关推荐
- 哈夫曼树带权路径长度c语言,【哈夫曼树】求结点的哈夫曼的带权路径长度
本文用C++采用顺序存储实现求哈夫曼树(即最小生成树)的带权路径长度 努力 下面来了解一下哈夫曼树的构造以及如何求带权路径长度: 哈夫曼树为带权路径长度最小的树 哈夫曼树 哈夫曼树的顺序存储 [问题描 ...
- 基于哈夫曼编码对txt文档实现压缩处理 | 算法分析之贪心算法设计 C语言版
声明:凡代码问题,欢迎在评论区沟通.承蒙指正,一起成长! 目录 一.实验内容与要求 二.概要设计 三.直接上代码 四.运行结果 一.实验内容与要求 内容:哈夫曼编码是广泛地用于数据文件压缩的十分有效的 ...
- 算法学习笔记——数据结构:哈夫曼树、带权路径长度WPL、哈夫曼编码
引入 合并果子问题如下: 有n堆果子,每次可以合并任意两堆果子,耗费体力值为[两堆果子数之和],最终在n-1次合并后,得到一堆果子. 给出合并的方案,使得耗费的体力值最小 例如有3堆果子,质量依次为1 ...
- 哈夫曼树(Huffman Tree),与哈夫曼编码
目录 一.哈夫曼树 1.什么是哈夫曼树? 2.哈夫曼树关键字说明 3.用代码实现哈夫曼树思路分析 4.代码实现 二.哈夫曼编码 1.哈夫曼编码基本介绍 2.原理剖析 3.代码实现 一.哈夫曼树 1.什 ...
- 关于哈夫曼树的例题(含哈夫曼树的具体构造过程)
1.设在某通信系统中使用了八个字符,出现频率分别为0.08,0.05,0.1,0.12,0.26:0.18,0.14,0.07,试构造一棵哈夫曼树,给出哈夫曼编码,再写出先.中.后序遍历结果,最后将哈 ...
- 数据结构—树与二叉树(Part Ⅵ)——平衡二叉树哈夫曼树
目录 平衡二叉树 平衡二叉树的定义 平衡二叉树的插入 LL型 RR型 代码思路 LR型 RL型 哈夫曼树和哈夫曼编码 哈夫曼树的定义 哈夫曼树的构造 哈夫曼树的结点类型 哈夫曼树构造的算法 哈夫曼编码 ...
- 创建哈夫曼树并求带权路径长度
创建哈夫曼树并求带权路径长度 [问题描述]根据给定的权重,构造哈夫曼树,输出其带权路径长度. [输入形式]输入权重,空格作为分隔,回车结束,权重个数小于10. [输出形式]哈夫曼树的带权路径长度. [ ...
- 哈夫曼树及求其WPL的算法
哈夫曼树及求其WPL算法 一.概念 给定 N N N个权值作为 N N N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree ...
- c语言字符串用for语句去重,python简介、第一个python程序、变量、字符编码、用户交互程序、if...else、while、for...
也愿大家永葆初心-- 已识乾坤大,犹怜草木青. 一.python简介 首先,我们普及一下编程语言的基础知识.用任何编程语言来开发程序,都是为了让计算机干活,比如下载一个MP3,编写一个文档等等,而计算 ...
最新文章
- php的反射作用是什么意思,php反射的作用是什么
- C++文件输入和输出
- 解决ftp的pasv模式下iptables设置问题
- angular2安装笔记
- JS实现的五级联动菜单效果完整实例
- 随想录(ros学习笔记)
- android微信第三方登录怎么通过code获取openid?
- nodejs学习笔记-入门helloworld
- Java开源生鲜电商平台-支付模块的设计与架构(源码可下载) Java开源生鲜电商平台-订单表的设计(源码可下载)...
- 官方client php api接口日记
- SourceTree 实现 git flow 流程
- 高清人脸数据集—FFHQ
- 视频直播本地测试服务器搭建
- 【VB】中CInt()、Fix()、Int()的区别
- 地图影像图数量存储大小精度推算
- 福州大学java期末试卷,Java Web认证题.doc
- RC有源滤波器之带通滤波器(四)
- 音量控制按钮有小红叉插头已从插孔拔出
- 奈学 AI架构师 p6,p7,p8
- db2 数据库配置HADR+TSA添加集群节点
热门文章
- 阿里云域名解析服务器
- 生物医学工程方向——SCI投稿经验分享 (Ultrasound in Medicine Biology)
- 你的人生中,最恐惧的事情是什么
- Yeelink:将复杂的传感器以极简的方式组到同一个网络内
- 抖音卖酒该如何操作?抖音怎么引流卖酒
- 大学生考计算机二级的好处,大学生考计算机二级到底有没有卵用?
- Proteus 8.9 SP2 专业版一体化快速安装教程(配包)
- python-docx删除段落(含回车符)v202111221750
- 年轻打工人,在互联网大厂“边缘”岗位挣扎
- Mail.Ru邮箱注册教程