编译成功

/* Note:Your choice is C IDE */

#include

#include

#define N 15

#define M 2*N-1

typedef struct

{float weight;

unsigned int parent,lchild,rchild;

}HTNode;

typedef struct

{

char data;

float weight;

char code[N];

}HTCode;

main()

{

int i,m,n,w[N+1];

float l=0.0;

HTNode ht[M+1];

HTCode hc[N+1];

Init (hc,&n);

HuffmanCoding (ht,hc,n);

for(i=1;i<=n;i++)

printf("\nThe code of '%c' is :%s",hc[i].data,hc[i].code);

for(i=1;i<=n;i++)

{l+=strlen (hc[i].code)*hc[i].weight;}

/*l=l/n;*/

printf("\n The average length of the Huffman coding is %f",l);

}

Init (HTCode hc[],int *n)

{

int i;

printf("\n input n=");

scanf("%d",&(*n));

fflush(stdin);

printf("\n input %d character \n",*n);

for(i=1;i<=*n;i++)

{printf("\n the %d character is:",i);

scanf("%c",&(hc[i].data));

fflush(stdin);

}

for(i=1;i<=*n;i++)

{printf("\n the %d character weight is:",i);

scanf("%f",&(hc[i].weight));}

}

HuffmanCoding (HTNode ht[],HTCode hc[],int n)

{

char cd[N];

int i,j,m,c,f,s1,s2,start;

m=2*n-1; /*2n-1个节点*/

for(i=1;i<=m;i++) /*初始化节点,1~n个原始节点有值*/

{

if(i<=n) ht[i].weight=hc[i].weight;

else ht[i].weight=0.0;

ht[i].parent=ht[i].lchild=ht[i].rchild=0;

}

for(i=n+1;i<=m;i++) /*构造二叉树*/

{

Select(ht,i-1,&s1,&s2); /*选择最小的两个概率节点,并且没有编码过的*/

ht[s1].parent=i;ht[s2].parent=i;

ht[i].lchild=s1;ht[i].rchild=s2;

ht[i].weight=ht[s1].weight+ht[s2].weight;

}

for(i=1;i<=m;i++)

{

printf("\n the %d charactor weight is %f:",i,ht[i].weight);

printf("\n the %d charactor lchild is %d:",i,ht[i].lchild);

printf("\n the %d charactor rchild is %d:",i,ht[i].rchild);

printf("\n the %d charactor parent is %d:",i,ht[i].parent);

}

for(i=0;i

cd[i]="";

cd[n-1]='\0'; /*编码初始化*/

for(i=1;i<=n;i++)

{

start=n-1;

for(c=i,f=ht[i].parent;f;f=ht[f].parent) /*遍历到父节点*/

if(ht[f].lchild==c)

cd[--start]='0';

else

cd[--start]='1';

strcpy(hc[i].code,&cd[start]);

}

}

Select(HTNode ht[],int k,int *s1,int *s2)

{

int i;

for(i=1;i<=k;i++)

{

if(ht[i].parent==0)

{*s1=i;

break;}

}

for(i=1;i<=k;i++)

if(ht[i].parent==0&&ht[i].weight

*s1=i;

for(i=1;i<=k;i++)

{if(ht[i].parent==0&&i!=*s1)

{*s2=i;

break;}

}

for(i=1;i<=k;i++)

if(ht[i].parent==0&&i!=*s1&&ht[i].weight

*s2=i;

printf("\n This is *s1:%d\n",*s1);

printf("\n This is *s2:%d\n",*s2);

}

信息论霍夫曼编码c语言,霍夫曼编码C语言相关推荐

  1. 信息论霍夫曼编码c语言,霍夫曼编码

    <信息论与编码>课程实验报告 姓 名 学 号 单 位 专 业 2014 年 12 月 4 日 实验一 一.实验目的 1.理解信源编码的意义: 2.掌握霍夫曼编码的方法及计算机实现: 二.实 ...

  2. C语言霍夫曼编码压缩,数据结构大作业——哈夫曼编码压缩BMP格式文件

    数据结构大作业--哈夫曼编码压缩BMP格式文件 首先需要了解BMP图像格式 BMP图像格式详解 其次需要了解哈夫曼编码如何对BMP文件进行压缩 哈夫曼压缩与解压缩 编程部分 使用的头文件 虽然这里用了 ...

  3. 可逼近信道容量编码技术之霍夫曼编码的实现

    可逼近信道容量编码技术之霍夫曼编码的实现 简介 在当今信息爆炸时代,如何采用有效的数据压缩技术来节省数据文件的存储空间和计算机网络的传送时间已越来越引起人们的重视.哈夫曼编码正是一种应用广泛且非常有效 ...

  4. labview霍夫曼编码_为什么霍夫曼编码好?

    7 个答案: 答案 0 :(得分:3) 如果为最常用使用的符号指定较少的数字或位或较短的代码字词,则可以节省大量存储空间. 假设您要为英文字母分配26个唯一代码,并希望根据这些代码存储英文小说(仅限字 ...

  5. c语言霍夫曼函数,使用C语言详解霍夫曼树数据结构

    1.基本概念 a.路径和路径长度 若在一棵树中存在着一个结点序列 k1,k2,--,kj, 使得 ki是ki+1 的双亲(1<=i 从 k1 到 kj 所经过的分支数称为这两点之间的路径长度,它 ...

  6. 创建霍夫曼树,霍夫曼编码以及使用霍夫曼编码压缩文件

    那么,什么是霍夫曼树(赫夫曼树)呢? 给定n个权值(权值就是每个节点里面存放的数据,但是根据业务需求不同,存放的数据类型有些差别)作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样 ...

  7. c语言赫夫曼树的编码与译码,哈夫曼树与编码译码实现

    一.哈弗曼树的基本概念. 哈夫曼树,又称最优树,是一类带权路径长度最短的树.下面有几个概念: (1)路径. 树中一个结点到另一个结点之间的分支构成这两个结点之间的路径. (2)路径长度. 路径上的分枝 ...

  8. C语言哈夫曼编码压缩解压

    C语言哈夫曼编码压缩解压 一.实验目的 掌握哈夫曼编码基本运算以及存储结构表示. 二.实验内容: 1.系统要求包含以下功能 1)初始化:从终端读入字符集大小n,以及n个字符和n个权值(或者读入字符集和 ...

  9. 数据结构c语言哈夫曼编码译码系统,数据结构C语言哈夫曼编码译码

    <数据结构C语言哈夫曼编码译码>由会员分享,可在线阅读,更多相关<数据结构C语言哈夫曼编码译码(16页珍藏版)>请在人人文库网上搜索. 1.实训报告题 目: 哈夫曼树编码译码院 ...

  10. 霍夫曼算法,构造霍夫曼树 (C++)

    //霍夫曼算法,构造霍夫曼树 #include <iostream> using namespace std; #define MAXSIZE 16 struct HaffNode {   ...

最新文章

  1. 简介子窗口控件(api)
  2. win8系统服务器地址怎么查,win8服务器地址怎么查
  3. SpringMVC+redis整合
  4. 设计模式----工厂模式
  5. HDU 3473 Minimum Sum
  6. 使用ABAP绘制可伸缩矢量图
  7. 使用Spring MVC时的常见错误
  8. const_iterator,const 迭代器
  9. oracle数据库归档闪回,[Oracle]Oracle的闪回归档
  10. java实体字节属性定义_Java字节码方法表与属性表详解
  11. Kerberos 基本命令 - 持续更新
  12. 微软OOXML正式成为国际标准 更名为OXML
  13. 4-1k近邻算法(k-Nearest Neighbors)
  14. 2017.9.21 所驼门王的宝藏 思考记录
  15. 认真学习系列:数据结构与算法——慕课网笔记
  16. Python学习总结(1)——编程准备和基本语法
  17. 增量式修改检验和(IP, TCP, UDP)算法的研究和实现
  18. 《机器学习实战:基于Scikit--Learn、Keras和TensorFlow(第2版)》学习笔记——前言
  19. 古建筑数字化影像采集技术分析
  20. Android Audio音频系统之深入浅出

热门文章

  1. B. Most socially-distanced subsequence(思维+模拟)
  2. Adobe发布AI智能生成图像新工具,助力Adobe国际认证再添就业利器
  3. ftp服务器架设与维护,FTP服务器架设至安全维护大全.doc
  4. springboot 配置德鲁伊连接池
  5. 「newbee-mall新蜂商城开源啦」SpringBoot+MyBatis开发JavaWeb线上商城项目
  6. gulp-rev 添加版本号
  7. 7-9 公路村村通(30 分)
  8. 什么是TMD的MVP(最小可行性产品)?
  9. 腾讯QQ第三方登录的实现
  10. oracle中ccuser,Oracle数据库查询与SESSIONS_PER_USER大于40