typedef struct
{char date;int lchild,rchild;int parent;
}HTnode;
void CreateHTnode(HTnode ht[],int n)
{int min1,min2,lnode,rnode;for(int i=0;i<2*n-1;++i)//所有节点的相关值置为-1{ht[i].prent=ht[i].lchild=ht[i].rchild-1;}for(int i=n;i<2*n-1;++i)//构造哈夫曼树{min1=min2=inf;lnode=rnode=-1;//代表2个最小权重的节点位置for(int j=0;j<i;++j)//在【0,i)中寻找最小权重的节点{if(ht[j].praent=-1)//在先前尚未找过的节点中进行查找{if(ht[j].date<min1)//判断是否是左节点{min2=min1,rnode=lnode;min1=ht[j].date,lnode=j;}else if(ht[j].date<min2)//判断是否是右节点。基于思想,不能写成else 也不能写成if{min2=ht[j].date,rnode=j;}}}//双亲节点的处理:ht[i].date=ht[lnode].date+ht[rnode].date;ht[i].lchild=lnode,ht[i].rchild=rnode;ht[lnode].parent=ht[rnode].parent=i;}
}数据结构李春葆第五版P239哈夫曼编码:
typedef struct
{char cd[N];//存放当前节点的哈夫曼吗int start;//表示cd[start...n0]部分是哈夫曼码//因为哈夫曼树中每个叶子节点的哈夫曼编码长度不同,为此采用HCode类型的变量的cd[start..n0]存放当前结点的哈夫曼码
}HCode;
void createHCode(HTNode ht[],Hcode hcd[],int n0)
{Hcode hc;int c,f;for(int i=0;i<n0;++i)//根据哈夫曼树求哈夫曼码{hc.start=n0,c=i;f=ht[i].parent;while(f!=-1)//直到循环到无双亲节点,即到达根节点{if(ht[f].lchild==c)//当前节点是双亲节点的左孩子hc.cd[hc.start--]='0';elsehc.cd[hc.start--]='1';//右孩子c=f,f=ht[f].parent;//反复进行同样的操作}hc.start++;//start指向哈夫曼树编码的最开始的字符hcd[i]=hc;}
}


												

第十周项目实践 哈夫曼树的建立哈夫曼编码相关推荐

  1. 第十周项目实践1 二叉树算法验证

    #ifndef BTREE_H_INCLUDED #define BTREE_H_INCLUDED #define MaxSize 100 typedef char ElemType; typedef ...

  2. 第7周项目实践 1 队列算法库的建立

    sqqueue.cpp#include <stdio.h> #include <malloc.h> #include "sqqueue.h" void In ...

  3. 数据结构编程实践(七)创建哈夫曼树、生成哈夫曼编码、完成图片的压缩与解压缩

    一.对图片的压缩与解压缩,涉及以下内容: 1.文件读写 2.创建Huffman树 3.生成Huffman编码 4.压缩图片文件 5 .  解压缩图片文件 二.将项目分成三个小任务,下一任务是在上一任务 ...

  4. 赫夫曼树建立c语言源程序编译结果详细解释,哈夫曼树的建立与实现最终版(备份存档)...

    <哈夫曼树的建立与实现.doc>由会员分享,可免费在线阅读全文,更多与<哈夫曼树的建立与实现(最终版)>相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索 ...

  5. 数据结构题:根据所给权值设计相应的哈夫曼树,并设计哈夫曼编码

    文章目录 前言 一.涉及到的知识点 二.例题讲解 1.例题1 2.例题2 总结 前言 在数据结构树的这章中,常常有题目,是这样的"给定一组权值-,试设计相应的哈夫曼树",有的还要求 ...

  6. 数据结构c语言版胡学刚答案,哈夫曼树的建立与实现(最终版)最新版

    <哈夫曼树的建立与实现.doc>由会员分享,可免费在线阅读全文,更多与<哈夫曼树的建立与实现(最终版)>相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索 ...

  7. 哈夫曼树 (100分)哈夫曼树

    4-1 哈夫曼树 (100分)哈夫曼树 第一行输入一个数n,表示叶结点的个数. 需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出哈夫曼树的带权路径长度(W ...

  8. 哈夫曼树+K叉哈夫曼树

    目录 基本概念 构造方法 证明 代码 k叉哈夫曼树 例题 基本概念 问题:给定n个权值,作为n个叶结点,构造一棵二叉树,而这棵树的特点是,有n个叶节点,叶节点的值为给定的权值.而内部节点的值为子树的权 ...

  9. 【哈夫曼树】创建哈夫曼树

    文章目录 基础概念: 什么是路径? 什么是路径长度? 什么是[结点]的带权路径长度? 什么是[树]的带权路径长度? 如何构建一棵哈夫曼树? 1.构建森林: 设计哈夫曼树 优先级队列:(priority ...

最新文章

  1. MVC,MVP 和 MVVM 的图示
  2. 0007-Reverse Integer(整数反转)
  3. 深入讲解JSP 2.0下的动态内容缓存技术
  4. Axios 如何缓存请求数据?
  5. 只安装了JRE,没有手动配置环境变量,eclipse跑不起来,Exit code = -1
  6. 作者:Ochora Dennis Reagan(1990-),男,东北大学软件学院硕士生
  7. 鉴定5分钟,准确率95.64% | 微生物所付钰组实现了微生物单细胞水平的快速准确鉴定...
  8. 学python可以从事什么工作-学Python能干什么工作?工作前景怎么样?
  9. C++ union联合体基础说明及应用
  10. 移动充电宝市场需求的调研报告
  11. mysql 未找到 WinSxS_清理WinSxs释放 Win7 C盘所占的空间
  12. 可以指定列fillna吗_京东e卡可以购买指定的京东自营商品?是真的吗
  13. RIGHT-BICEP单元测试——“二柱子四则运算升级版”
  14. 黑苹果Mac系统快捷键修改
  15. ubuntu18.04双系统解决进入桌面后鼠标和键盘失灵问题
  16. linux中无法联网小电脑图标不见,电脑桌面上的网络连接图标突然不见怎么解决?...
  17. 智安网络丨什么是等保2.0?
  18. 万万没想到!TCP/IP 协议会有这么多漏洞
  19. 保研被鸽,去了自己不理想的学校怎么办?
  20. 一篇文章读懂少儿机器人编程课程学什么?

热门文章

  1. leetcode - 4Sum
  2. android lk DEFINES定义的环境变量的值
  3. NDK JNI方式读写Android系统的GPIO
  4. xp宿主机和VMware下Ubuntu12.04共享文件夹
  5. 抱怨IT公司人才缺乏?留住现有人才方是正途
  6. 容器日志采集利器Log-Pilot
  7. NJ4X源码阅读分析笔记系列(一)——项目整体分析
  8. IntelliJ IDEA的几种常见的快捷键
  9. Python学习笔记-DNS处理模块dnspython
  10. 企业必须由真正在乎它的人掌控