当前位置: 首页 > news >正文

浙江省住房和城乡建设厅 官方网站域名免费注册地址

浙江省住房和城乡建设厅 官方网站,域名免费注册地址,建设网站教程论坛,全国做网站的大公司有哪些(数据结构)哈夫曼编码实现#xff08;C语言#xff09; 哈夫曼的编码:从一堆数组当中取出来最小的两个值#xff0c;按照左下右大的进行绘制#xff0c;将两个权值之和#xff0c;放入队列当中#xff0c;然后再进行取出两个小的#xff0c;以此类推#xff0c;直到全部…(数据结构)哈夫曼编码实现C语言 哈夫曼的编码:从一堆数组当中取出来最小的两个值按照左下右大的进行绘制将两个权值之和放入队列当中然后再进行取出两个小的以此类推直到全部结束在根据图根节点到叶子节点每一个分支来得出编码向左0向右1即可得到一个结果。 #include stdio.h #include stdlib.h// 定义哈夫曼树结点的结构 struct Node {int frequency;char data;struct Node* left;struct Node* right; };// 创建一个新的哈夫曼树结点 struct Node* newNode(int frequency, char data) {struct Node* node (struct Node*)malloc(sizeof(struct Node));node-frequency frequency;node-data data;node-left NULL;node-right NULL;return node; }struct MinHeap {int size;int capacity;struct Node** array; };// 创建最小堆 struct MinHeap* createMinHeap(int capacity) {struct MinHeap* minHeap (struct MinHeap*)malloc(sizeof(struct MinHeap));minHeap-size 0;minHeap-capacity capacity;minHeap-array (struct Node**)malloc(capacity * sizeof(struct Node*));return minHeap; }// 交换两个结点的位置 void swapNode(struct Node** a, struct Node** b) {struct Node* 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]-frequency minHeap-array[smallest]-frequency) {smallest left;}if (right minHeap-size minHeap-array[right]-frequency minHeap-array[smallest]-frequency) {smallest right;}if (smallest ! idx) {swapNode(minHeap-array[smallest], minHeap-array[idx]);minHeapify(minHeap, smallest);} }// 检查最小堆是否只有一个元素 int isSizeOne(struct MinHeap* minHeap) {return minHeap-size 1; }// 检查结点是否是叶子结点 int isLeaf(struct Node* root) {return !(root-left) !(root-right); }// 从最小堆中提取最小值即频率最小的结点 struct Node* extractMin(struct MinHeap* minHeap) {struct Node* temp minHeap-array[0];minHeap-array[0] minHeap-array[minHeap-size - 1];--minHeap-size;minHeapify(minHeap, 0);return temp; }// 将结点插入最小堆 void insertMinHeap(struct MinHeap* minHeap, struct Node* node) {minHeap-size;int i minHeap-size - 1;while (i node-frequency minHeap-array[(i - 1) / 2]-frequency) {minHeap-array[i] minHeap-array[(i - 1) / 2];i (i - 1) / 2;}minHeap-array[i] node; }// 构建哈夫曼树 struct Node* buildHuffmanTree(char data[], int frequency[], int size) {struct Node *left, *right, *top;// 创建一个最小堆并初始化struct MinHeap* minHeap createMinHeap(size);// 向最小堆中插入结点for (int i 0; i size; i) {insertMinHeap(minHeap, newNode(frequency[i], data[i]));}// 构建哈夫曼树while (!isSizeOne(minHeap)) {// 从最小堆中取出最小的两个结点作为左子树和右子树left extractMin(minHeap);right extractMin(minHeap);// 创建一个新的结点作为父结点top newNode(left-frequency right-frequency, -);top-left left;top-right right;// 将父结点插入最小堆中insertMinHeap(minHeap, top);}// 最后剩下的结点就是哈夫曼树的根结点return extractMin(minHeap); }// 打印哈夫曼编码 void printHuffmanCodes(struct Node* root, int arr[], int top) {// 叶子结点是存有字符的结点if (root-left) {arr[top] 0;printHuffmanCodes(root-left, arr, top 1);}if (root-right) {arr[top] 1;printHuffmanCodes(root-right, arr, top 1);}// 如果是叶子结点没有左右子结点则打印编码if (!root-left !root-right) {printf(%c: , root-data);for (int i 0; i top; i) {printf(%d, arr[i]);}printf(\n);} }int main() {char data[] { a, b, c, d, e };int frequency[] { 5, 9, 12, 13, 16 };int size sizeof(data) / sizeof(data[0]);struct Node* root buildHuffmanTree(data, frequency, size);int arr[100], top 0;printHuffmanCodes(root, arr, top);return 0; }
http://www.pierceye.com/news/817476/

相关文章:

  • 专注咖啡相关的网站wordpress 访问缓慢
  • 自适应网站制作官网网站域名与建设
  • 淘宝网站开发成本武进建设局网站进不去
  • 比较好网站制作公司行业协会网站织梦模板
  • 牛人网络网站像wordpress一样的网站吗
  • 那种做任务的网站叫什么wordpress 数据库 旧Ip
  • 制作深圳网站建设百度推广广告收费标准
  • 电影采集网站建设国产做爰全免费的视频网站
  • 集团网站建设特点 助君长春seo公司网站
  • 网站域名备案 更改吗在线做文档的网站
  • 青海网站制作多少钱做网站教程pdf
  • dw做网站背景音乐wordpress 获取当前文章id
  • 上海鹭城建设集团网站icp备案查询
  • 企业站用什么程序做网站深圳手机报价网站
  • 网站开发国外研究状况建设部相关网站
  • 租赁网站开发台州网站优化
  • 网站开发人员工工资网站开发一个支付功能要好多钱
  • 工程建设管理网站源码网站怎样做地理位置定位
  • 太仓公司网站建设电话网络公关名词解释
  • 江门网站建设策划什么是网络营销职能
  • 北京网站托管毕设做网站是不是太low
  • 企业网站建设费用属管理费用吗重庆网站建设制作设计公司哪家好
  • 深圳营销型网站需要多少钱做网站个体户经营范围
  • php 手机网站 上传图片晋州做网站的联系电话
  • 云天下网站建设做抖音seo排名软件是否合法
  • 网站开发合同管辖权异议龙岩网上办事大厅官网
  • 建网站费用明细海口建设网站
  • 网站页面设计说明怎么写影视小程序源码
  • 传媒网站制作网站申请建设
  • 前端做项目的网站新密市城乡建设局网站