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

数据结构_哈夫曼树及其应用

构造算法的例子

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

构造算法的实现

在这里插入图片描述
在这里插入图片描述

初始化,置权值

在这里插入图片描述

int i, m, s1, s2;m = 2 * n - 1;for (i = 1; i <= m; i++){HT[i].lch = 0;HT[i].rch = 0;HT[i].parent = 0;}for (i = 1; i <= n; i++){cin >> HT[i].weight;}

合并结点

在这里插入图片描述

// 创建哈夫曼树for (i = n + 1; i <= m; i++){s1 = -1;s2 = -1;Selete(HT, i - 1, s1, s2);HT[s1].parent = i;HT[s2].parent = i;HT[i].lch = s1;HT[i].rch = s2;HT[i].weight = HT[s1].weight + HT[s2].weight;}

哈夫曼编码

在这里插入图片描述

void HuNode::create_Code(HuNode* HT, char** code, int n)
{int i, current, parent, k;char temp[100]; // 临时数组存放编码for (i = 1; i <= n; i++){current = i;parent = HT[i].parent;k = 0; // 编码长度计数器while (parent != 0){if (HT[parent].lch == current){temp[k] = '0'; // 左子节点编码为 '0'k++;}else{temp[k] = '1';k++;}current = parent;parent = HT[current].parent;}temp[k] = '\0';// 将编码倒置并保存code[i] = new char[k + 1];for (int j = 0; j < k; j++){code[i][j] = temp[k - j - 1];}code[i][k] = '\0';}
}

文件的编码或译码

在这里插入图片描述
在这里插入图片描述

int HuNode::Decode(const string codestr, char txtstr[], int n)
{int index, root, i, curNode;index = 0;root = 2 * n - 1; // 根节点编号curNode = root;for (i = 0; i < codestr.length(); i++){if (codestr[i] == '0'){curNode = this[curNode].lch;}else{curNode = this[curNode].rch;}// 解码失败if (curNode == 0){return error;}// 是叶子节点if (this[curNode].lch == 0 && this[curNode].rch == 0){txtstr[index] = this[curNode].data;index++;curNode = root;}}if (curNode != root){return error;}txtstr[index] = '\0';return ok;
}

http://www.mrgr.cn/news/68725.html

相关文章:

  • Hello Java
  • 【java】内存图练习
  • IT部门如何平衡业务需求与公司战略,IT的目标到底是让谁满意?
  • Prompt 工程
  • WinForms 中使用 MVVM 模式构建应用:实现登录页面、页面导航及 SQLite 数据库连接完整框架搭建过程
  • parseInt 是一个内置的 JavaScript 函数,用于将字符串转换为整数。
  • 智慧矿山建设方案
  • Github的OAuth2登录
  • 块存储、文件存储和对象存储详细介绍
  • 自制头文件:BetterPrint(更好的输出)
  • 首批入驻 | ZStack AIOS平台智塔入驻信通院“铸基计划”应用商店
  • 【Qt】Macbook M1下载安装
  • Python 虚拟环境创建
  • 用户登录密码存储加密策略(附Python 和 bcrypt 库进行安全密码验证)
  • 人工智能——小白学习指南
  • 第10章 多表查询
  • shell脚本练习
  • vue3 + vite 实现版本更新检查(检测到版本更新时提醒用户刷新页面)
  • 设计模式-七个基本原则之一-接口隔离原则 + SpringBoot案例
  • 文件IO拷贝应用
  • c++模板的优点和缺点
  • 【计网】实现reactor反应堆模型 --- 框架搭建
  • 练习LabVIEW第四十四题
  • 数据库大题解题方法(一)
  • 在暗处执着生长,终有一日馥郁传香
  • 第十六届四川省大学生程序设计竞赛