c语言哈夫曼树构造代码

博主就很掘的一个人,最近学哈夫曼树,想着用指针去实现,觉得用指针实现,内存消耗会更少,写到后面发现越来与麻烦,且内存开销并没有减少,于是还是使用结构体数组中规中矩的去实现哈夫曼树,博主不爱看别人的代码,知道原理便直接上手实现,所以,我的代码往往更加简单,因为,自己写,越简单越好,谁愿意写复杂的代码呢,学习哈夫曼树得小伙伴可以学习学习下面的代码。

#include<stdio.h>
#include<stdlib.h>typedef struct Tree {int data = -1;int parent = -1;int  lchild = -1;int rchild = -1;}Tree;void InitHuffmanTree(Tree HT[],int a[],int n) {int i;for (i = 0; i < n; i++) {HT[i].data= a[i];//  HT[i].rchild = NULL;//HT[i].lchild = NULL;}}void HuffmanTree_print(Tree HT[], int  n ) {int i;for (i = 0; i < n; i++) {printf("%d ", HT[i].data);//   printf("%d ", HT[i].parent);}
}
void select(Tree HT[],int n) {int min1, min2, min1_index, min2_index;int ju1=0 ,ju2=0;for (int i = 0; i < n; i++) {if (HT[i].parent == -1 && ju1==0) {min1 = HT[i].data;min1_index = i;ju1 = 1;}if (HT[i].parent == -1 && ju1 != 0&& min1> HT[i].data) {min1 = HT[i].data;min1_index = i;}}HT[min1_index].parent = n;for (int i = 0; i < n; i++) {if (HT[i].parent == -1 && ju2 == 0) {min2 = HT[i].data;min2_index = i;ju2 = 1;}if (HT[i].parent == -1 && ju2 != 0 && min2 > HT[i].data) {min2 = HT[i].data;min2_index = i;}}HT[min2_index].parent = n;HT[n].data = HT[min2_index].data + HT[min1_index].data;HT[n].lchild = min1_index;HT[n].rchild = min2_index;//printf("%d", HT[n].data);}void CreateHuffmanTree(Tree HT[], int n) {int min1, min2, min1_index, min2_index;int i;for (i = n; i < 2 * n - 1; i++) {select(HT, i);HuffmanTree_print(HT, i);printf("\n");}}
void HuffmanTree_erfodic(Tree HT[], int top) {printf("%d ", HT[top].data);if (HT[top].lchild != -1) {HuffmanTree_erfodic(HT,HT[top].lchild);}if (HT[top].rchild != -1) {HuffmanTree_erfodic(HT,HT[top].rchild);}}int main() {Tree* T=NULL;int i;int a[] = { 4,6,7,2,5,8,6,9 };Tree HT[16];//sort_data(a, 8);InitHuffmanTree(HT, a, 8);CreateHuffmanTree(HT, 8);//HuffmanTree_print(HT, 8);//data_print(a, 8);//输出数组元素//createTree(T);HuffmanTree_erfodic(HT,14);printf("\n%d ", T);//输出树的根节点地址return 0;}

c语言哈夫曼树构造代码相关推荐

  1. 哈夫曼树构造以及代码实现

    哈夫曼树构造以及代码实现 什么是哈夫曼树 理解哈夫曼树 哈夫曼树的构造 哈夫曼树构造-代码实现 什么是哈夫曼树 构造一颗二叉树,该树的带权路径长度达到最小,称为最优二叉树,也称为哈夫曼树(Huffma ...

  2. 哈夫曼树构造算法的实现

    先考虑如何存储:既可以链式也可以顺序,但顺序存储结构(数组)简单点 这里用一维结构数组,结构数组是因为我们要保存的结点的值比较多,先看结点的类型定义 那几个值?每一个都要知道他的权值weight是多少 ...

  3. C语言哈夫曼树压缩/解压器

    C语言哈夫曼树压缩/解压器 小编是大一的菜鸡,这个题目是数据结构的一个实验题,为了完成这个作业,查找了各种资料,借鉴了很多人的代码,前后折腾了三天左右.代码可能跟网上的不一样,大佬路过请不要踩我. 温 ...

  4. 哈夫曼树构造哈夫曼编码

    在传输文字时,经常要将文字转换成二进制字符串.所以我们希望编码最短,但是又想保证它的唯一性.哈夫曼树具有最小带权路径长度,用来实现编码就可以编码最短,所以用哈夫曼树来构造编码.而前缀编码就可以保证在解 ...

  5. 算法学习笔记10——应用哈夫曼树构造最短的不等长编码方案

    内容: (1)设需要编码的字符集为{d1, d2, -, dn},它们出现的频率为{w1, w2, -, wn},应用哈夫曼树构造最短的不等长编码方案. 提示: 哈夫曼树(Huffman Tree), ...

  6. 最小堆实现哈夫曼树构造

    0. 序 本以为用最小堆实现个哈夫曼树是个简单的事情,结果一不小心就花了好几个小时才写完...实现过程中主要有三个方面的问题没注意,导致花了很多时间进行调试. 一是多重指针malloc分配时要多加注意 ...

  7. 哈夫曼树构造算法的正确性证明

    哈夫曼树构造 1.哈夫曼树的定义 给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree). 2.哈夫曼树的构造 假 ...

  8. 【Lua】哈夫曼树构造算法的分析与实现

    哈夫曼树构造算法分析 1.哈夫曼树中权重越大的叶子离根越近,采用贪心算法构造哈夫曼树,首先选中权重值小的叶子结点进行构造 2.步骤 构造森林全是根:根据n个给定结点的权重值{W1, W2-Wn}构成 ...

  9. C语言:哈夫曼树构造及编码(核心代码每一行都有注释)

    一.[实验目的及要求] 理解Huffman树的概念及其存储结构: 熟悉Huffman树的构造: 掌握Huffman树的编码方法. 二.[实验内容] 1.代码实现Huffman编码 2.请统计每个字符出 ...

最新文章

  1. CUDA 7流简化并发
  2. php基础+jquery基础
  3. jQuery使用blur()方法触发两次的解决方法
  4. Oracle10g OEM乱码解决
  5. MySQL选择数据库(MySQL USE语句)
  6. 面了三次字节,他的一些感悟
  7. VS2013 调用的目标发生了异常
  8. 漫画:什么是红黑树?(下篇)
  9. outlook 邮件 设置延迟送信
  10. 华为手机如何给应用加锁_华为手机正确防止应用后台运行被清理的操作方法
  11. JVM基础学习之基本概念、可见性与同步
  12. java cobar_alibaba的COBAR真是强大.
  13. 查找网络上的计算机快捷键,电脑表格查找快捷键ctrl加什么(表格快捷键各种用法大全)...
  14. onclick事件诡异事件 一
  15. “商务网”,聚合头头网商务开放室,集群式商务推广平台
  16. Android Studio 默认安装路径,SDK默认安装路径
  17. java excel相同的合并_Java使用Apache POI合并Excel连续相同内容的单元格
  18. eclipse的光标变粗,及其解决办法
  19. 穴位保健:自我按摩赶走亚健康
  20. web学习入门资源总结

热门文章

  1. 2020蓝桥杯跑步锻炼
  2. 哈尔滨工程大学考研经验分享(下):复试
  3. 服务器性能测试 虫师,【虫师】jmeter数据库性能测试
  4. c#--示例选号器--随机N组选择号码
  5. MTK平台4G执法记录仪开发
  6. C primer plus(第六版)第十一章源代码
  7. 微软为正版用户提供中文版杀毒软件免费下载
  8. guns java_Guns代码生成简明教程
  9. Google Earth Engine(GEE)—— 各矿区时序NDVI变化图(包含具体的运行函数)
  10. 【网络基础系列二】BOOTP、DHCP协议