c语言哈夫曼树构造代码
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语言哈夫曼树构造代码相关推荐
- 哈夫曼树构造以及代码实现
哈夫曼树构造以及代码实现 什么是哈夫曼树 理解哈夫曼树 哈夫曼树的构造 哈夫曼树构造-代码实现 什么是哈夫曼树 构造一颗二叉树,该树的带权路径长度达到最小,称为最优二叉树,也称为哈夫曼树(Huffma ...
- 哈夫曼树构造算法的实现
先考虑如何存储:既可以链式也可以顺序,但顺序存储结构(数组)简单点 这里用一维结构数组,结构数组是因为我们要保存的结点的值比较多,先看结点的类型定义 那几个值?每一个都要知道他的权值weight是多少 ...
- C语言哈夫曼树压缩/解压器
C语言哈夫曼树压缩/解压器 小编是大一的菜鸡,这个题目是数据结构的一个实验题,为了完成这个作业,查找了各种资料,借鉴了很多人的代码,前后折腾了三天左右.代码可能跟网上的不一样,大佬路过请不要踩我. 温 ...
- 哈夫曼树构造哈夫曼编码
在传输文字时,经常要将文字转换成二进制字符串.所以我们希望编码最短,但是又想保证它的唯一性.哈夫曼树具有最小带权路径长度,用来实现编码就可以编码最短,所以用哈夫曼树来构造编码.而前缀编码就可以保证在解 ...
- 算法学习笔记10——应用哈夫曼树构造最短的不等长编码方案
内容: (1)设需要编码的字符集为{d1, d2, -, dn},它们出现的频率为{w1, w2, -, wn},应用哈夫曼树构造最短的不等长编码方案. 提示: 哈夫曼树(Huffman Tree), ...
- 最小堆实现哈夫曼树构造
0. 序 本以为用最小堆实现个哈夫曼树是个简单的事情,结果一不小心就花了好几个小时才写完...实现过程中主要有三个方面的问题没注意,导致花了很多时间进行调试. 一是多重指针malloc分配时要多加注意 ...
- 哈夫曼树构造算法的正确性证明
哈夫曼树构造 1.哈夫曼树的定义 给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree). 2.哈夫曼树的构造 假 ...
- 【Lua】哈夫曼树构造算法的分析与实现
哈夫曼树构造算法分析 1.哈夫曼树中权重越大的叶子离根越近,采用贪心算法构造哈夫曼树,首先选中权重值小的叶子结点进行构造 2.步骤 构造森林全是根:根据n个给定结点的权重值{W1, W2-Wn}构成 ...
- C语言:哈夫曼树构造及编码(核心代码每一行都有注释)
一.[实验目的及要求] 理解Huffman树的概念及其存储结构: 熟悉Huffman树的构造: 掌握Huffman树的编码方法. 二.[实验内容] 1.代码实现Huffman编码 2.请统计每个字符出 ...
最新文章
- CUDA 7流简化并发
- php基础+jquery基础
- jQuery使用blur()方法触发两次的解决方法
- Oracle10g OEM乱码解决
- MySQL选择数据库(MySQL USE语句)
- 面了三次字节,他的一些感悟
- VS2013 调用的目标发生了异常
- 漫画:什么是红黑树?(下篇)
- outlook 邮件 设置延迟送信
- 华为手机如何给应用加锁_华为手机正确防止应用后台运行被清理的操作方法
- JVM基础学习之基本概念、可见性与同步
- java cobar_alibaba的COBAR真是强大.
- 查找网络上的计算机快捷键,电脑表格查找快捷键ctrl加什么(表格快捷键各种用法大全)...
- onclick事件诡异事件 一
- “商务网”,聚合头头网商务开放室,集群式商务推广平台
- Android Studio 默认安装路径,SDK默认安装路径
- java excel相同的合并_Java使用Apache POI合并Excel连续相同内容的单元格
- eclipse的光标变粗,及其解决办法
- 穴位保健:自我按摩赶走亚健康
- web学习入门资源总结