写一个关于哈夫曼编码的 C 语言的完整代码
时间: 2023-02-17 13:01:03 浏览: 45
这是一个使用哈夫曼编码的 C 语言程序的示例:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_TREE_HT 100
// 每个字符出现的次数
struct MinHeapNode {
char data;
int freq;
struct MinHeapNode *left, *right;
};
// 最小堆
struct MinHeap {
int size;
int capacity;
struct MinHeapNode** array;
};
// 创建一个新的节点
struct MinHeapNode* newNode(char data, int freq) {
struct MinHeapNode* temp = (struct MinHeapNode*) malloc(sizeof(struct MinHeapNode));
temp->left = temp->right = NULL;
temp->data = data;
temp->freq = freq;
return temp;
}
// 创建一个最小堆
struct MinHeap* createMinHeap(int capacity) {
struct MinHeap* minHeap = (struct MinHeap*) malloc(sizeof(struct MinHeap));
minHeap->size = 0;
minHeap->capacity = capacity;
minHeap->array = (struct MinHeapNode**) malloc(minHeap->capacity * sizeof(struct MinHeapNode*));
return minHeap;
}
// 交换两个节点
void swapMinHeapNode(struct MinHeapNode** a, struct MinHeapNode** b) {
struct MinHeapNode* t = *a;
*a = *b;
*b = t;
}
// 检查是否为最小堆
int isSizeOne(struct MinHeap* minHeap) {
return (minHeap->size == 1);
}
// 获取最小堆的根节点
struct MinHeapNode* getMin(struct MinHeap* minHeap) {
return minHeap->array[0];
}
// 最小堆的最后一个节点
struct MinHeapNode* getLastNode(struct MinHeap* minHeap) {
return minHeap->array[minHeap->size - 1];
}
// 将最后一个节点移到根节点位置
void minHeapify(struct MinHeap* minHeap, int index) {
int smallest = index;
int left = 2 * index + 1;
int right = 2 * index + 2;
if (left < minHeap->size && minHeap->array[left]->freq