实验目的##

掌握哈夫曼树的概念、哈夫曼编码及其应用。

掌握生成哈夫曼树的算法。

会用哈夫曼树对传输报文进行编码。

掌握二叉树的二叉链表存储方式及相应操作的实现。

##实验内容##

用哈夫曼编码进行通信时,可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对要传输的数据预先编码。试为这样的信息发送端写一个哈夫曼编码程序。

初始化。从终端输入字符集大小n,以及 n 个字符和 n个权值,试构造一棵哈夫曼树,要求左子树的权值小于右子树的权值。

编码。若输入的权值分别是报文中不同字符出现的频率,利用已建好的哈夫曼树,对n个字符进行哈夫曼编码,然后将结果存入一个结构数组中,并将编码输出。

##源代码##

#include

#include

#include

#include

typedef struct

{

unsigned int weight;

unsigned int parent,lchild,rchild;

}HTNode,HuffmanTree;

typedef char **HuffmanCode;

int min1(HuffmanTree t,int i)

{

int j,flag;

unsigned int k=UINT_MAX;

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

if(t[j].weight < k && t[j].parent == 0)

k = t[j].weight,flag = j;

t[flag].parent=1;

return flag;

}

void select(HuffmanTree t,int i,int *s1,int *s2)

{

int j;

*s1=min1(t,i);

*s2=min1(t,i);

if(*s1 > s2)

{

j=*s1;

*s1=*s2;

*s2=j;

}

}

void HuffmanCoding(HuffmanTree *HT,HuffmanCode *HC,int *w,int n)

{

int m,i,s1,s2,start;

unsigned c,f;

HuffmanTree p;

char *cd;

if(n<=1)

return;

m=2*n-1;

*HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));

for(p=*HT+1,i=1;i<=n;++i,++p,++w)

{

(*p).weight=*w;

(*p).parent=0;

(*p).lchild=0;

(*p).rchild=0;

}

for(;i<=m;++i,++p)

(*p).parent=0;

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

{

select(*HT,i-1,&s1,&s2);

(*HT)[s1].parent=(*HT)[s2].parent=i;

(*HT)[i].lchild=s1;

(*HT)[i].rchild=s2;

(*HT)[i].weight=(*HT)[s1].weight+(*HT)[s2].weight;

}

*HC=(HuffmanCode)malloc((n+1)*sizeof(char*));

cd=(char*)malloc(n*sizeof(char));

cd[n-1]='\0';

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

{

start=n-1;

for(c=i,f=(*HT)[i].parent; f!=0; c=f,f=(*HT)[f].parent)

if((*HT)[f].lchild==c)

cd[--start]='0';

else

cd[--start]='1';

(*HC)[i]=(char*)malloc((n-start)*sizeof(char));

strcpy((*HC)[i],&cd[start]);

}

free(cd);

}

int main()

{

HuffmanTree HT;

HuffmanCode HC;

int *w,n,i;

printf("input the number of quanzhi(>1):");

scanf("%d",&n);

w=(int)malloc(nsizeof(int));

printf("input quanzhi):\n",n);

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

scanf("%d",w+i);

HuffmanCoding(&HT,&HC,w,n);

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

puts(HC[i]);

return 0;

}

##实验截图##

蓝桥哈夫曼树C语言,实验四 哈夫曼树及哈夫曼编码相关推荐

  1. c语言实验四报告,湖北理工学院14本科C语言实验报告实验四数组

    湖北理工学院14本科C语言实验报告实验四 数组.doc 实验四 数 组实验课程名C语言程序设计专业班级 14电气工程2班 学号 201440210237 姓名 熊帆 实验时间 5.12-5.26 实验 ...

  2. c语言的实验报告 实验4,C语言实验四实验报告

    C语言实验报告四 实验4:循环结构程序设计 1.使用循环语句完成累乘.图像输出的程序编写. 2.掌握较复杂结构程序的编写. 3.掌握程序调试的方法. 4.编写实验报告. 二.实验内容 1.已知xyz ...

  3. 智慧树c语言实验八函数,C君带你玩编程

    第一章 认识C语言 认识C语言 C语言的历史与特点 C语言的历史与特点 算法及其表示 算法及其表示 C程序的操作过程 C程序的操作过程 C程序的基本结构 C程序的基本结构 标识符.关键字和保留字 标识 ...

  4. 2022SDUT知到/智慧树----C语言第四章测试题解

    1.[单选题] 有下列程序,已知字母A的ASCII码为65,程序运行后的输出结果是(). #include <stdio.h> int main() {char c1,c2; c1='A' ...

  5. 天津理工大学c语言实验报告8,天津理工大学-c语言上机报告4.doc

    天津理工大学-c语言上机报告4.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3 ...

  6. 字符串哈夫曼树C语言,哈夫曼树(赫夫曼树、最优树)及C语言实现

    赫夫曼 哈夫曼树相关的几个名词 路径:在一棵树中,一个结点到另一个结点之间的通路,称为路径.路径长度:在一条路径中,每经过一个结点,路径长度都要加 1 .例如在一棵树中,规定根结点所在层数为1层,那么 ...

  7. 实验四-哈夫曼编码的MATLAB实现

    信息论编码实验3~9连载,更多看专栏. 哈夫曼编码MATLAB实现 一.哈夫曼编码的原理 二.哈夫曼编码的实例 三.代码及运行结果 3.1根据原理自编程序 3.2利用MATLAB内嵌函数 四.程序自评 ...

  8. 二叉树的基本运算实验报告C语言,实验三 二叉树基本操作与应用实验

    实验三 二叉树基本操作与应用实验 第三次实验主要包括两部分内容:1.二叉树基本操作实验:2.二叉树应用-赫夫曼树与赫夫曼编码实验.基本操作包括存储结构建立和遍历算法,本文只给出部分参考程序,请大家尽量 ...

  9. 川轻化c语言实验答案,c语言实验报告(学生学籍管理系统)

    <c语言实验报告(学生学籍管理系统)>由会员分享,可在线阅读,更多相关<c语言实验报告(学生学籍管理系统)(20页珍藏版)>请在人人文库网上搜索. 1.氮闭谜蹋典灸逐簇距坏硕蹄 ...

最新文章

  1. 【ICML2021】计算机视觉中的自注意力机制教程,谷歌伯克利出品
  2. sm4加密 解密(oc)
  3. web前端开发怎么样学习?看这份web前端学习路线
  4. C++编程(一):匈牙利命名法
  5. linux登录界面输入密码时卡住6,centos6.8(虚拟机VNC)输入正确用户名和密码仍跳回登录界面...
  6. 基于selenium的爬虫
  7. C++关键字 explicit
  8. c语言兔子序列答案,C语言经典题目——兔子生兔子(示例代码)
  9. android 如何解锁屏幕,2解锁屏幕破裂Android手机的方法(自由方式)
  10. 金税盘专、普红字发票开具步骤及(税盘注销方法)
  11. 网站渗透实战试验(仅供参考)
  12. C# pdf转png图片
  13. html5语音 没反映,【报Bug】关于HTML5 getUserMedia()、audio语音的问题
  14. 创业公司的抗争,共享单车的合并
  15. java thread yield()_Java Thread yield()方法
  16. 【物理应用】大气辐射和透射率模型及太阳和月亮模型(Matlab代码实现)
  17. position: sticky 属性
  18. 圆周率一千万亿位_目前圆周率已经达到十万亿位了,为何还要算?有什么用处?...
  19. Revit API、AddInManager、RevitLookup、SDK的用途
  20. vue3+howler.js实现音频播放,兼容大多数音频格式

热门文章

  1. PHP获取客户端的网卡mac物理地址
  2. 老李分享:Mac快捷键
  3. 我国农村经济发展战略
  4. ueditor图片上传,网络连接错误的解决方案
  5. python程序实例教程基础-Python程序设计案例教程——从入门到机器学习(微课版)...
  6. ipython安装教程-ipython notebook教程
  7. python读取txt数据-python读取文本文件数据
  8. python爬虫教程下载-Python爬虫入门教程!手把手教会你爬取网页数据
  9. python爬虫案例-Python爬取租房数据实例,据说可以入门爬虫的小案例!
  10. python变量类型-python变量的数据类型有哪些?