数据结构源码笔记(C语言):哈夫曼树
#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语言):哈夫曼树相关推荐
- Alink漫谈(十六) :Word2Vec源码分析 之 建立霍夫曼树
Alink漫谈(十六) :Word2Vec源码分析 之 建立霍夫曼树 文章目录 Alink漫谈(十六) :Word2Vec源码分析 之 建立霍夫曼树 0x00 摘要 0x01 背景概念 1.1 词向量 ...
- 数据结构源码笔记(C语言描述)汇总
数据结构源码笔记(C语言):英文单词按字典序排序的基数排序 数据结构源码笔记(C语言):直接插入排序 数据结构源码笔记(C语言):直接选择排序 数据结构源码笔记(C语言):置换-选择算法 数据结构源码 ...
- 数据结构源码笔记(C语言):英文单词按字典序排序的基数排序
//实现英文单词按字典序排序的基数排序算法#include<stdio.h> #include<malloc.h> #include<string.h>#defin ...
- 数据结构源码笔记(C语言):索引文件建立和查找
//实现索引文件建立和查找算法#include<stdio.h> #include<malloc.h> #include<string.h> #include< ...
- 数据结构源码笔记(C语言):快速排序
//实现快速排序算法 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; type ...
- 数据结构源码笔记(C语言):冒泡排序
//冒泡排序算法实现 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; type ...
- 数据结构源码笔记(C语言):希尔插入排序
//实现希尔插入排序算法 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; ty ...
- 数据结构源码笔记(C语言):直接插入排序
//实现直接插入排序算法#include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; typ ...
- 数据结构源码笔记(C语言):直接选择排序
//实现直接选择排序算法#include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; typ ...
最新文章
- cookie的简单学习
- Mysql导入zabbix的sql语句时报错:ERROR 1045 (28000)
- 第一章:1.1 信号表征
- android 号码查联系人,Android联系人查询
- 一个页面从输入URL到加载显示完成,发生了什么?
- android学习日记13--数据存储之ContentProvide
- c语言读取nc文件格式,nc文件资料地读取与处理.doc
- 95-136-070-源码-Operator-扩展有状态的operators
- MyCat分布式数据库集群架构工作笔记0021---高可用_单表存储千万级_海量存储_水平分表全局表
- 我的第一次随笔——胡桂玲
- HTML网易云音乐首页动画,仿网易云音乐广告页的转场动画
- 移动硬盘加密软件的相关简介
- ADNI下载临床数据
- polkit启动失败_Linux MySQL 常见无法启动或启动异常的解决方案(上)
- 【程序设计基础与实验】地铁售票查询系统
- 台式计算机把光驱改成硬盘,笔记本电脑光驱怎么改成硬盘|笔记本光驱位换成硬盘方法...
- Apache Pulsar PMC 成员翟佳:开源和 Apache 社区是个带有魔法的宝库
- hp linux 禁用u盘启动项,BIOS关闭Secure Boot(安全启动)方法大全(联想,华硕,DELL,HP等品牌)...
- 2022年版中国煤矿安全设备市场投资规划及需求前景预测报告
- 如何理解vcc,vdd,vss