#include <stdio.h>
#include <stdlib.h>
#define MAXINT 2147483647
#define MAXNUM 50
#define MAXNODE 100struct HtNode //哈夫曼树结点的结构
{int ww;int parent,llink,rlink;
};struct HtTree
{struct HtNode ht[MAXNODE];int root;//哈夫曼树根在数组中的下标
};typedef struct HtTree *PHtTree;//哈夫曼树类型的指针类型PHtTree huffman(int m,int *w)  //构造m个叶结点的haffman树
{PHtTree pht;int i,j,x1,x2,m1,m2;pht=(PHtTree)malloc(sizeof(struct HtTree));  //创建空haffman树if(pht==NULL){printf("Out of space!!\n");return pht;}for(i=0;i<2*m-1;i++) //置初态{pht->ht[i].llink=-1;pht->ht[i].rlink=-1;pht->ht[i].parent=-1;if(i<m)pht->ht[i].ww=w[i];elsepht->ht[i].ww=-1;}for(i=0;i<m-1;i++)  //每循环一次构造一个内部结点{m1=MAXINT;m2=MAXINT;  //相关变量赋初值x1=-1;x2=-1;for(j=0;j<m+1;j++)  //找两个最小权值的无父结点的结点if(pht->ht[j].ww<m1&&pht->ht[j].parent==-1){m2=m1;x2=x1;m1=pht->ht[j].ww;x1=j;}elseif(pht->ht[j].ww<m2&&pht->ht[j].parent==-1){m2=pht->ht[j].ww;x2=j;}pht->ht[x1].parent=m+i;  //构造一个内部结点pht->ht[x2].parent=m+i;pht->ht[m+i].ww=m1+m2;pht->ht[m+i].llink=x1;pht->ht[m+i].rlink=x2;pht->root=m+i;}return pht;
}void printcode(PHtTree pht,int m)  //打印huffman树pht中每个外部结点的编码
{int i,j;int parentnode;for(j=0;j<m;j++){if(pht->ht[j].llink!=-1||pht->ht[j].rlink!=-1)  continue;//不是分支结点printf("the Reverse conde of node%d is :",j+1);    //得到的编码应倒过来i=j;while(pht->ht[i].parent!=-1){parentnode=pht->ht[i].parent;if(pht->ht[parentnode].llink==i)printf("0");elseprintf("1");i=parentnode;}printf("\n");}
}int main()
{int m=6;int w[]={1,3,5,7,9,11};PHtTree pht;pht=huffman(6,w);printcode(pht,m);   return 0;
}

数据结构源码笔记(C语言描述)汇总:

数据结构源码笔记(C语言):英文单词按字典序排序的基数排序

数据结构源码笔记(C语言):直接插入排序

数据结构源码笔记(C语言):直接选择排序

数据结构源码笔记(C语言):置换-选择算法

数据结构源码笔记(C语言):Huffman树字符编码

数据结构源码笔记(C语言):Josephus问题之顺序表

数据结构源码笔记(C语言):Josephus问题之循环链接表

数据结构源码笔记(C语言):多项式合并

数据结构源码笔记(C语言):二叉树之叶子结点旋转销毁

数据结构源码笔记(C语言):哈夫曼树

数据结构源码笔记(C语言):集合的位向量表示

数据结构源码笔记(C语言):链接队列

数据结构源码笔记(C语言):链接栈

数据结构源码笔记(C语言):线性表的单链表示

数据结构源码笔记(C语言):线性表的顺序表示

数据结构源码笔记(C语言):栈的基本操作

数据结构源码笔记(C语言):中缀表达式

数据结构源码笔记(C语言):希尔插入排序

数据结构源码笔记(C语言):索引文件建立和查找

数据结构源码笔记(C语言):冒泡排序

数据结构源码笔记(C语言):快速排序

数据结构源码笔记(C语言):可变长度字符串的快速排序

数据结构源码笔记(C语言):基数排序

数据结构源码笔记(C语言):二路归并排序

数据结构源码笔记(C语言):堆排序

数据结构源码笔记(C语言):二叉树搜索树Kruskal

数据结构源码笔记(C语言):二叉搜索树Prim

数据结构源码笔记(C语言):最短路径弗洛伊德算法

数据结构源码笔记(C语言):深度、广度优先生成树

数据结构源码笔记(C语言):邻接矩阵转化邻接表

数据结构源码笔记(C语言):统计字符串中出现的字符及其次数

数据结构源码笔记(C语言):顺序查找

数据结构源码笔记(C语言):哈希表的相关运算算法

数据结构源码笔记(C语言):分块法查找

数据结构源码笔记(C语言):二分查找

数据结构源码笔记(C语言):二叉树遍历

数据结构源码笔记(C语言):二叉平衡树的相关操作算法

数据结构源码笔记(C语言):二叉排序树的基本操作算法

数据结构源码笔记(C语言):B树的相关运算算法

数据结构源码笔记(C语言):哈夫曼树相关推荐

  1. Alink漫谈(十六) :Word2Vec源码分析 之 建立霍夫曼树

    Alink漫谈(十六) :Word2Vec源码分析 之 建立霍夫曼树 文章目录 Alink漫谈(十六) :Word2Vec源码分析 之 建立霍夫曼树 0x00 摘要 0x01 背景概念 1.1 词向量 ...

  2. 数据结构源码笔记(C语言描述)汇总

    数据结构源码笔记(C语言):英文单词按字典序排序的基数排序 数据结构源码笔记(C语言):直接插入排序 数据结构源码笔记(C语言):直接选择排序 数据结构源码笔记(C语言):置换-选择算法 数据结构源码 ...

  3. 数据结构源码笔记(C语言):英文单词按字典序排序的基数排序

    //实现英文单词按字典序排序的基数排序算法#include<stdio.h> #include<malloc.h> #include<string.h>#defin ...

  4. 数据结构源码笔记(C语言):索引文件建立和查找

    //实现索引文件建立和查找算法#include<stdio.h> #include<malloc.h> #include<string.h> #include< ...

  5. 数据结构源码笔记(C语言):快速排序

    //实现快速排序算法 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; type ...

  6. 数据结构源码笔记(C语言):冒泡排序

    //冒泡排序算法实现 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; type ...

  7. 数据结构源码笔记(C语言):希尔插入排序

    //实现希尔插入排序算法 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; ty ...

  8. 数据结构源码笔记(C语言):直接插入排序

    //实现直接插入排序算法#include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; typ ...

  9. 数据结构源码笔记(C语言):直接选择排序

    //实现直接选择排序算法#include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; typ ...

最新文章

  1. cookie的简单学习
  2. Mysql导入zabbix的sql语句时报错:ERROR 1045 (28000)
  3. 第一章:1.1 信号表征
  4. android 号码查联系人,Android联系人查询
  5. 一个页面从输入URL到加载显示完成,发生了什么?
  6. android学习日记13--数据存储之ContentProvide
  7. c语言读取nc文件格式,nc文件资料地读取与处理.doc
  8. 95-136-070-源码-Operator-扩展有状态的operators
  9. MyCat分布式数据库集群架构工作笔记0021---高可用_单表存储千万级_海量存储_水平分表全局表
  10. 我的第一次随笔——胡桂玲
  11. HTML网易云音乐首页动画,仿网易云音乐广告页的转场动画
  12. 移动硬盘加密软件的相关简介
  13. ADNI下载临床数据
  14. polkit启动失败_Linux MySQL 常见无法启动或启动异常的解决方案(上)
  15. 【程序设计基础与实验】地铁售票查询系统
  16. 台式计算机把光驱改成硬盘,笔记本电脑光驱怎么改成硬盘|笔记本光驱位换成硬盘方法...
  17. Apache Pulsar PMC 成员翟佳:开源和 Apache 社区是个带有魔法的宝库
  18. hp linux 禁用u盘启动项,BIOS关闭Secure Boot(安全启动)方法大全(联想,华硕,DELL,HP等品牌)...
  19. 2022年版中国煤矿安全设备市场投资规划及需求前景预测报告
  20. 如何理解vcc,vdd,vss

热门文章

  1. iis7 php安装教程,iis7 php安装方法详解
  2. reduce 轻松将cookie转化为对象
  3. 优秀案例:12个精美的设计工作室 设计公司网站
  4. C# 结构体与类的区别
  5. makefile 和shell文件相互调用
  6. 项目管理概述学习记录(二)
  7. html编写个人博客_Django 开发简易博客网站
  8. Scrum之 站立例会
  9. linux 运维shell习题
  10. 某国家正在测试“关闭互联网”方法