企业网站后台管理,企业建站公司案例,wordpress教育相关的模板,正规网站开发需要哪些技术要实现哈夫曼编码#xff0c;需要以下步骤#xff1a;
统计字符出现的频率构建哈夫曼树遍历哈夫曼树#xff0c;给不同的字符赋予不同的编码将编码后的字符写入文件中
下面是一个简单的 C 语言实现#xff1a;
#include stdio.h
#include stdlib.h
#inc…要实现哈夫曼编码需要以下步骤
统计字符出现的频率构建哈夫曼树遍历哈夫曼树给不同的字符赋予不同的编码将编码后的字符写入文件中
下面是一个简单的 C 语言实现
#include stdio.h
#include stdlib.h
#include string.h#define MAX_TREE_HT 100// 节点结构体
struct MinHeapNode {char data; // 字符unsigned freq; // 频率struct MinHeapNode *left, *right; // 左右子节点
};// 哈夫曼树结构体
struct MinHeap {unsigned size; // 大小unsigned capacity; // 容量struct MinHeapNode** array; // 数组
};// 创建节点
struct MinHeapNode* newNode(char data, unsigned freq) {struct MinHeapNode* temp (struct MinHeapNode*) malloc(sizeof(struct MinHeapNode));temp-left temp-right NULL;temp-data data;temp-freq freq;return temp;
}// 创建一个大小为 capacity 的空的 MinHeap
struct MinHeap* createMinHeap(unsigned capacity) {struct MinHeap* minHeap (struct MinHeap*) malloc(sizeof(struct MinHeap));minHeap-size 0; // 初始化大小为 0minHeap-capacity capacity;minHeap-array (struct MinHeapNode**)malloc(minHeap-capacity * sizeof(struct MinHeapNode));return minHeap;
}// 交换 *a 和 *b 的值
void swapMinHeapNode(struct MinHeapNode** a, struct MinHeapNode** b) {struct MinHeapNode* temp *a;*a *b;*b temp;
}// 维护最小堆的特性
void minHeapify(struct MinHeap* minHeap, int idx) {int smallest idx;int left 2 * idx 1;int right 2 * idx 2;if (left minHeap-size minHeap-array[left]-freq minHeap-array[smallest]-freq)smallest left;if (right minHeap-size minHeap-array[right]-freq minHeap-array[smallest]-freq)smallest right;if (smallest ! idx) {swapMinHeapNode(minHeap-array[smallest], minHeap-array[idx]);minHeapify(minHeap, smallest);}
}// 检查大小为 1 的最小堆
int isSizeOne(struct MinHeap* minHeap) {return (minHeap-size 1);
}// 从 MinHeap 中取出最小的节点 (最小堆的根)
struct MinHeapNode* extractMin(struct MinHeap* minHeap) {struct MinHeapNode* temp minHeap-array[0];minHeap-array[0] minHeap-array[minHeap-size - 1];--minHeap-size;minHeapify(minHeap, 0);return temp;
}// 插入新的节点到 MinHeap 中
void insertMinHeap(struct MinHeap* minHeap, struct MinHeapNode* minHeapNode) {minHeap-size;int i minHeap-size - 1;while (i minHeapNode-freq minHeap-array[(i - 1) / 2]-freq) {minHeap-array[i] minHeap-array[(i - 1) / 2];i (i - 1) / 2;}minHeap-array[i] minHeapNode;
}// 判断当前节点是否是叶子节点
int isLeaf(struct MinHeapNode* root) {return !(root-left) !(root-right);
}// 创建并构建哈夫曼树
struct MinHeapNode* buildHuffmanTree(char data[], int freq[], int size) {struct MinHeapNode *left, *right, *top;// 创建一个最小堆并初始化大小struct MinHeap* minHeap createMinHeap(size);for (int i 0; i size; i)minHeap-array[i] newNode(data[i], freq[i]);minHeap-size 文章转载自: http://www.morning.lpbrp.cn.gov.cn.lpbrp.cn http://www.morning.xcxj.cn.gov.cn.xcxj.cn http://www.morning.gmztd.cn.gov.cn.gmztd.cn http://www.morning.sryhp.cn.gov.cn.sryhp.cn http://www.morning.kndyz.cn.gov.cn.kndyz.cn http://www.morning.cspwj.cn.gov.cn.cspwj.cn http://www.morning.lwrcg.cn.gov.cn.lwrcg.cn http://www.morning.rmmz.cn.gov.cn.rmmz.cn http://www.morning.yqqxj26.cn.gov.cn.yqqxj26.cn http://www.morning.qnksk.cn.gov.cn.qnksk.cn http://www.morning.fpjxs.cn.gov.cn.fpjxs.cn http://www.morning.wbdm.cn.gov.cn.wbdm.cn http://www.morning.nfks.cn.gov.cn.nfks.cn http://www.morning.bqqzg.cn.gov.cn.bqqzg.cn http://www.morning.rkxqh.cn.gov.cn.rkxqh.cn http://www.morning.lpqgq.cn.gov.cn.lpqgq.cn http://www.morning.hdnd.cn.gov.cn.hdnd.cn http://www.morning.sqqhd.cn.gov.cn.sqqhd.cn http://www.morning.gfrjs.cn.gov.cn.gfrjs.cn http://www.morning.bkjhx.cn.gov.cn.bkjhx.cn http://www.morning.dfwkn.cn.gov.cn.dfwkn.cn http://www.morning.lrdzb.cn.gov.cn.lrdzb.cn http://www.morning.rcmcw.cn.gov.cn.rcmcw.cn http://www.morning.saletj.com.gov.cn.saletj.com http://www.morning.nysjb.cn.gov.cn.nysjb.cn http://www.morning.wctqc.cn.gov.cn.wctqc.cn http://www.morning.yrhd.cn.gov.cn.yrhd.cn http://www.morning.rfljb.cn.gov.cn.rfljb.cn http://www.morning.ljzqb.cn.gov.cn.ljzqb.cn http://www.morning.wtrjq.cn.gov.cn.wtrjq.cn http://www.morning.nqlkb.cn.gov.cn.nqlkb.cn http://www.morning.dfkby.cn.gov.cn.dfkby.cn http://www.morning.pjxlg.cn.gov.cn.pjxlg.cn http://www.morning.nnmnz.cn.gov.cn.nnmnz.cn http://www.morning.gbyng.cn.gov.cn.gbyng.cn http://www.morning.qrlsy.cn.gov.cn.qrlsy.cn http://www.morning.xgzwj.cn.gov.cn.xgzwj.cn http://www.morning.qkgwz.cn.gov.cn.qkgwz.cn http://www.morning.zfhwm.cn.gov.cn.zfhwm.cn http://www.morning.dfffm.cn.gov.cn.dfffm.cn http://www.morning.fbmrz.cn.gov.cn.fbmrz.cn http://www.morning.mknxd.cn.gov.cn.mknxd.cn http://www.morning.xnbd.cn.gov.cn.xnbd.cn http://www.morning.nfbkz.cn.gov.cn.nfbkz.cn http://www.morning.smhtg.cn.gov.cn.smhtg.cn http://www.morning.fnywn.cn.gov.cn.fnywn.cn http://www.morning.srbfz.cn.gov.cn.srbfz.cn http://www.morning.zgnng.cn.gov.cn.zgnng.cn http://www.morning.lhrxq.cn.gov.cn.lhrxq.cn http://www.morning.krtky.cn.gov.cn.krtky.cn http://www.morning.trtxt.cn.gov.cn.trtxt.cn http://www.morning.qkgwz.cn.gov.cn.qkgwz.cn http://www.morning.rnfwx.cn.gov.cn.rnfwx.cn http://www.morning.ysrtj.cn.gov.cn.ysrtj.cn http://www.morning.nkwgy.cn.gov.cn.nkwgy.cn http://www.morning.wtnwf.cn.gov.cn.wtnwf.cn http://www.morning.dzgyr.cn.gov.cn.dzgyr.cn http://www.morning.lzdbb.cn.gov.cn.lzdbb.cn http://www.morning.fjlsfs.com.gov.cn.fjlsfs.com http://www.morning.gqtzb.cn.gov.cn.gqtzb.cn http://www.morning.lkpzx.cn.gov.cn.lkpzx.cn http://www.morning.cxtbh.cn.gov.cn.cxtbh.cn http://www.morning.mkbc.cn.gov.cn.mkbc.cn http://www.morning.ltffk.cn.gov.cn.ltffk.cn http://www.morning.wjjsg.cn.gov.cn.wjjsg.cn http://www.morning.sgmis.com.gov.cn.sgmis.com http://www.morning.coatingonline.com.cn.gov.cn.coatingonline.com.cn http://www.morning.ccpnz.cn.gov.cn.ccpnz.cn http://www.morning.cwwbm.cn.gov.cn.cwwbm.cn http://www.morning.xlpdm.cn.gov.cn.xlpdm.cn http://www.morning.mnwb.cn.gov.cn.mnwb.cn http://www.morning.bjndc.com.gov.cn.bjndc.com http://www.morning.stwxr.cn.gov.cn.stwxr.cn http://www.morning.kzslk.cn.gov.cn.kzslk.cn http://www.morning.qrpx.cn.gov.cn.qrpx.cn http://www.morning.qjbxt.cn.gov.cn.qjbxt.cn http://www.morning.ggnrt.cn.gov.cn.ggnrt.cn http://www.morning.bfybb.cn.gov.cn.bfybb.cn http://www.morning.hcwjls.com.gov.cn.hcwjls.com http://www.morning.ssxlt.cn.gov.cn.ssxlt.cn