c语言实现哈夫曼树构造

c语言实现构造哈夫曼树

输入字符和权值,实现哈夫曼树的构造

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXSIZE 50
typedef char DataType;

typedef struct	// 哈夫曼树结点的结构
{
   
   DataType data;	// 数据用字符表示
   int weight;	// 权值
   int parent;	// 双亲
   int lchild,rchild;	// 左右孩子
} HuffNode;

typedef struct	// 哈夫曼编码的存储结构
{
   
   DataType cd[MAXSIZE];	// 存放编码位串
   int start;	// 编码的起始位置
} HuffCode;


void HuffmanCreate(HuffNode *ht,int n)
{
   
   int i,j,p1,p2,m1,m2;
   for(i=1;i<=n;i++)
   {
   
      getchar();	// 接收回车
      printf("哈夫曼树第%d个字符及其权重分别为(用空格分隔)""\n",i);
      scanf("%c %d",&ht[i].data,&ht[i].weight);
   }
   for(i=1;i<=2*n -1;i++)	// 对数组初始化
      ht[i].parent=ht[i].lchild=ht[i].rchild=
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在C语言实现哈夫曼树构造,可以按照以下步骤进行: 1. 定义哈夫曼树的节点结构体: ```c typedef struct huffman_node { int weight; // 权重 struct huffman_node* left; struct huffman_node* right; } HuffmanNode; ``` 2. 定义一个函数来创建哈夫曼树节点: ```c HuffmanNode* create_node(int weight) { HuffmanNode* node = (HuffmanNode*)malloc(sizeof(HuffmanNode)); node->weight = weight; node->left = NULL; node->right = NULL; return node; } ``` 3. 定义一个比较函数来对节点进行排序: ```c int compare(const void* a, const void* b) { return ((HuffmanNode*)a)->weight - ((HuffmanNode*)b)->weight; } ``` 4. 定义一个函数来构建哈夫曼树: ```c HuffmanNode* build_huffman_tree(int weights[], int n) { // 创建叶子节点数组 HuffmanNode** nodes = (HuffmanNode**)malloc(sizeof(HuffmanNode*) * n); for (int i = 0; i < n; i++) { nodes[i] = create_node(weights[i]); } // 循环构建哈夫曼树 while (n > 1) { // 对节点数组进行排序 qsort(nodes, n, sizeof(HuffmanNode*), compare); // 创建新的内部节点 HuffmanNode* internal_node = create_node(0); internal_node->left = nodes[0]; internal_node->right = nodes[1]; internal_node->weight = nodes[0]->weight + nodes[1]->weight; // 删除已经合并的节点 nodes[0] = internal_node; for (int i = 1; i < n - 1; i++) { nodes[i] = nodes[i + 1]; } n--; } HuffmanNode* root = nodes[0]; free(nodes); return root; } ``` 5. 使用示例: ```c int main() { int weights[] = {5, 9, 12, 13, 16, 45}; int n = sizeof(weights) / sizeof(weights[0]); HuffmanNode* root = build_huffman_tree(weights, n); // 对构建好的哈夫曼树进行操作 return 0; } ``` 以上就是一个简单的C语言实现哈夫曼树构造的示例,你可以根据自己的需求进行扩展和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值