c语言哈夫曼树统计字母频率,C语言实现哈夫曼树

本文通过C语言实现哈夫曼树,介绍如何统计字母频率,并构建哈夫曼树。主要内容包括定义HuffmanNode结构体,实现哈夫曼树的初始化、输入、维护堆性质、构建堆、构造哈夫曼树、显示编码等功能。
摘要由CSDN通过智能技术生成

584a59579d702e2e1ee7be129beb8d7f.png

本文实例为大家分享了C语言实现哈夫曼树的具体代码,供大家参考,具体内容如下

//哈夫曼树C语言实现

#include

#include

typedef struct HuffmanNode

{

char letter;//存储的字符,叶节点为字母,非叶节点为#

struct HuffmanNode *parent;//父亲结点

int code;//如果为父亲结点的左孩子,则为0,右孩子为1

}HuffmanNode;

typedef struct HeapNode

{

int rate;//出现频率

HuffmanNode *node;//对应于哈夫曼树中的结点

}HeapNode;

/*------------------全局变量----------------------*/

int heapSize;//堆大小

int num;//记录字符数量

HeapNode *heap;//堆数组

char *letter;//字符数组

int *rate;//字符出现频率

HuffmanNode **array; //记录叶节点的数组,打印编码的时候可以从叶结点回溯向上

char ch;

/*----------------------函数声明-------------------------*/

void init(int numOfLetters);//初始化变量

void input();//输入数组

int parent(int i);//求父节点

int left(int i);//求左孩子

int right(int i);//求右孩子

void swap(int i,int j);//交换函数

void heapIfy(int i,int localHeapSize);//维持堆性质函数,使用前提为左右子树均为最小堆

void buildHeap();//初始化堆

HeapNode* extractMin();//去掉并返回堆中最小的元素

void

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值