蓝桥哈夫曼树C语言,实验四 哈夫曼树及哈夫曼编码
实验目的##
掌握哈夫曼树的概念、哈夫曼编码及其应用。
掌握生成哈夫曼树的算法。
会用哈夫曼树对传输报文进行编码。
掌握二叉树的二叉链表存储方式及相应操作的实现。
##实验内容##
用哈夫曼编码进行通信时,可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对要传输的数据预先编码。试为这样的信息发送端写一个哈夫曼编码程序。
初始化。从终端输入字符集大小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语言,实验四 哈夫曼树及哈夫曼编码相关推荐
- c语言实验四报告,湖北理工学院14本科C语言实验报告实验四数组
湖北理工学院14本科C语言实验报告实验四 数组.doc 实验四 数 组实验课程名C语言程序设计专业班级 14电气工程2班 学号 201440210237 姓名 熊帆 实验时间 5.12-5.26 实验 ...
- c语言的实验报告 实验4,C语言实验四实验报告
C语言实验报告四 实验4:循环结构程序设计 1.使用循环语句完成累乘.图像输出的程序编写. 2.掌握较复杂结构程序的编写. 3.掌握程序调试的方法. 4.编写实验报告. 二.实验内容 1.已知xyz ...
- 智慧树c语言实验八函数,C君带你玩编程
第一章 认识C语言 认识C语言 C语言的历史与特点 C语言的历史与特点 算法及其表示 算法及其表示 C程序的操作过程 C程序的操作过程 C程序的基本结构 C程序的基本结构 标识符.关键字和保留字 标识 ...
- 2022SDUT知到/智慧树----C语言第四章测试题解
1.[单选题] 有下列程序,已知字母A的ASCII码为65,程序运行后的输出结果是(). #include <stdio.h> int main() {char c1,c2; c1='A' ...
- 天津理工大学c语言实验报告8,天津理工大学-c语言上机报告4.doc
天津理工大学-c语言上机报告4.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3 ...
- 字符串哈夫曼树C语言,哈夫曼树(赫夫曼树、最优树)及C语言实现
赫夫曼 哈夫曼树相关的几个名词 路径:在一棵树中,一个结点到另一个结点之间的通路,称为路径.路径长度:在一条路径中,每经过一个结点,路径长度都要加 1 .例如在一棵树中,规定根结点所在层数为1层,那么 ...
- 实验四-哈夫曼编码的MATLAB实现
信息论编码实验3~9连载,更多看专栏. 哈夫曼编码MATLAB实现 一.哈夫曼编码的原理 二.哈夫曼编码的实例 三.代码及运行结果 3.1根据原理自编程序 3.2利用MATLAB内嵌函数 四.程序自评 ...
- 二叉树的基本运算实验报告C语言,实验三 二叉树基本操作与应用实验
实验三 二叉树基本操作与应用实验 第三次实验主要包括两部分内容:1.二叉树基本操作实验:2.二叉树应用-赫夫曼树与赫夫曼编码实验.基本操作包括存储结构建立和遍历算法,本文只给出部分参考程序,请大家尽量 ...
- 川轻化c语言实验答案,c语言实验报告(学生学籍管理系统)
<c语言实验报告(学生学籍管理系统)>由会员分享,可在线阅读,更多相关<c语言实验报告(学生学籍管理系统)(20页珍藏版)>请在人人文库网上搜索. 1.氮闭谜蹋典灸逐簇距坏硕蹄 ...
最新文章
- 【ICML2021】计算机视觉中的自注意力机制教程,谷歌伯克利出品
- sm4加密 解密(oc)
- web前端开发怎么样学习?看这份web前端学习路线
- C++编程(一):匈牙利命名法
- linux登录界面输入密码时卡住6,centos6.8(虚拟机VNC)输入正确用户名和密码仍跳回登录界面...
- 基于selenium的爬虫
- C++关键字 explicit
- c语言兔子序列答案,C语言经典题目——兔子生兔子(示例代码)
- android 如何解锁屏幕,2解锁屏幕破裂Android手机的方法(自由方式)
- 金税盘专、普红字发票开具步骤及(税盘注销方法)
- 网站渗透实战试验(仅供参考)
- C# pdf转png图片
- html5语音 没反映,【报Bug】关于HTML5 getUserMedia()、audio语音的问题
- 创业公司的抗争,共享单车的合并
- java thread yield()_Java Thread yield()方法
- 【物理应用】大气辐射和透射率模型及太阳和月亮模型(Matlab代码实现)
- position: sticky 属性
- 圆周率一千万亿位_目前圆周率已经达到十万亿位了,为何还要算?有什么用处?...
- Revit API、AddInManager、RevitLookup、SDK的用途
- vue3+howler.js实现音频播放,兼容大多数音频格式
热门文章
- PHP获取客户端的网卡mac物理地址
- 老李分享:Mac快捷键
- 我国农村经济发展战略
- ueditor图片上传,网络连接错误的解决方案
- python程序实例教程基础-Python程序设计案例教程——从入门到机器学习(微课版)...
- ipython安装教程-ipython notebook教程
- python读取txt数据-python读取文本文件数据
- python爬虫教程下载-Python爬虫入门教程!手把手教会你爬取网页数据
- python爬虫案例-Python爬取租房数据实例,据说可以入门爬虫的小案例!
- python变量类型-python变量的数据类型有哪些?