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

英文字母哈夫曼编码c语言,C语言哈夫曼编码代码

《C语言哈夫曼编码代码》由会员分享,可在线阅读,更多相关《C语言哈夫曼编码代码(3页珍藏版)》请在人人文库网上搜索。

1、可编辑#include#include#includeintm,s1,s2;typedefstructunsignedintweight;unsignedintparent,lchild,rchild;HTNode,*HuffmanTree;/动态分配数组存储哈夫曼树typedefchar*HuffmanCode;/动态分配数组存储哈夫曼编码表voidSelect(HuffmanTreeHT,intn)inti,j;for(i=1;iHTi.weight)&(!HTi.parent)&(s2!=i)s1=i;for(j=1;jHTj.weight)&(!HTj.parent)&(s1!=j)s。

2、2=j;voidHuffmanCoding(HuffmanTree&HT,HuffmanCodeHC,int*w,intn)/算法6.13/w存放n个字符的权值(均0),构造哈夫曼树HT,/并求出n个字符的哈夫曼编码HCinti,j;char*cd;intp;intcdlen;if(n=1)return;m=2*n-1;HT=(HuffmanTree)malloc(m+1)*sizeof(HTNode);/0号单元未用for(i=1;i=n;i+)/初始化HTi.weight=wi-1;HTi.parent=0;HTi.lchild=0;HTi.rchild=0;for(i=n+1;i=m;i。

3、+)/初始化HTi.weight=0;HTi.parent=0;HTi.lchild=0;HTi.rchild=0;puts(n哈夫曼树的构造过程如下所示:);printf(HT初态:n结点weightparentlchildrchild);for(i=1;i=m;i+)printf(n%4d%8d%8d%8d%8d,i,HTi.weight,HTi.parent,HTi.lchild,HTi.rchild);printf(按任意键,继续.);getchar();for(i=n+1;i=m;i+)/建哈夫曼树/在HT1.i-1中选择parent为0且weight最小的两个结点,/其序号分别为s。

4、1和s2。Select(HT,i-1);HTs1.parent=i;HTs2.parent=i;HTi.lchild=s1;HTi.rchild=s2;HTi.weight=HTs1.weight+HTs2.weight;printf(nselect:s1=%ds2=%dn,s1,s2);printf(结点weightparentlchildrchild);for(j=1;j=i;j+)printf(n%4d%8d%8d%8d%8d,j,HTj.weight,HTj.parent,HTj.lchild,HTj.rchild);printf(按任意键,继续.);getchar();/-无栈非递归。

5、遍历哈夫曼树,求哈夫曼编码cd=(char*)malloc(n*sizeof(char);/分配求编码的工作空间p=m;cdlen=0;for(i=1;i=m;+i)/遍历哈夫曼树时用作结点状态标志HTi.weight=0;while(p)if(HTp.weight=0)/向左HTp.weight=1;if(HTp.lchild!=0)p=HTp.lchild;cdcdlen+=0;elseif(HTp.rchild=0)/登记叶子结点的字符的编码HCp=(char*)malloc(cdlen+1)*sizeof(char);cdcdlen=0;strcpy(HCp,cd);/复制编码(串)e。

6、lseif(HTp.weight=1)/向右HTp.weight=2;if(HTp.rchild!=0)p=HTp.rchild;cdcdlen+=1;else/HTp.weight=2,退回退到父结点,编码长度减1HTp.weight=0;p=HTp.parent;-cdlen;/HuffmanCodingintmain()HuffmanTreeHT;HuffmanCode*HC;int*w,n,i;puts(输入结点数:);scanf(%d,&n);getchar();HC=(HuffmanCode*)malloc(n*sizeof(HuffmanCode);w=(int*)malloc(n*sizeof(int);printf(输入%d个结点的权值n,n);for(i=0;in;i+)scanf(%d,&wi);getchar();HuffmanCoding(HT,HC,w,n);puts(n各结点的哈夫曼编码:);for(i=1;i=n;i+)printf(%2d(%4d):%sn,i,wi-1,HCi);getchar();精品文档。

相关文章:

  • c语言内怎么更改环境变量,C语言中使用环境变量的技巧
  • 太原理工大学c语言课程设计报告,太原理工大学程序设计技术实验报告
  • C语言编程机器码转真值,【转载】IEEE754浮点数的表示方法
  • c语言题加密文件,请高手指教!C语言文件加密题!
  • linux machine start,linux中MACHINE_STARTEND在9g10ek上实现
  • android设置按钮大小为屏幕百分比,android – 设置UI元素的位置/大小为屏幕大小的百分比...
  • android4.1用哪个ndk编译,androidstudio中用ndk编译的问题
  • 海美迪盒子android升级,海美迪4K播放器直升安卓7.0 画质再上新境界
  • android 手势旋转,android中手势操作图片的平移、缩放、旋转
  • 微信分身 android,微信分身版安卓版
  • android的设备节点,无法打开设备节点android
  • html加载图标的xpath位置,在格式不正确的HTML中使用XPath查找节点(或...
  • html 布局 id class,不使用class和id进行网页布局的方法
  • html画布模板,html2canvas.js
  • 川信计算机组装维护,凉山州中学生技能大赛信息技术类竞赛总结
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • CSS实用技巧
  • JavaScript HTML DOM
  • js学习笔记
  • python 学习笔记 - Queue Pipes,进程间通讯
  • React 快速上手 - 07 前端路由 react-router
  • Sublime text 3 3103 注册码
  • Vue.js 移动端适配之 vw 解决方案
  • vue-loader 源码解析系列之 selector
  • 大整数乘法-表格法
  • 深入浏览器事件循环的本质
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 新书推荐|Windows黑客编程技术详解
  • (1)虚拟机的安装与使用,linux系统安装
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (六)Hibernate的二级缓存
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (全注解开发)学习Spring-MVC的第三天
  • (一)基于IDEA的JAVA基础1
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (转载)从 Java 代码到 Java 堆
  • *上位机的定义
  • .net framework profiles /.net framework 配置
  • .NET Reactor简单使用教程
  • .Net Web项目创建比较不错的参考文章
  • .net 按比例显示图片的缩略图
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • .NET实现之(自动更新)
  • .net通用权限框架B/S (三)--MODEL层(2)
  • .net与java建立WebService再互相调用
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • /etc/sudoers (root权限管理)
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • @EventListener注解使用说明
  • @ModelAttribute注解使用
  • @RequestMapping用法详解
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • []Telit UC864E 拨号上网