哈夫曼编码上机实验报告
第四次上机实验报告
姓名:康辉 学号:15180210013 班级:1518021 一、题目要求
对输入的一串电文字符(A B C D E F G H 8 个字符,其概率分别为 0.05, 0.29, 0.07, 0.08, 0.14, 0.23, 0.03, 0.11)实现Huffman编码,再对Huffman编码生成的代码串进行译码,输出电文字符串。实现功能如下: ? Huffman树的建立 ? Huffman编码的生成 ? 编码文件的译码 二、程序思路
设置一个数组v存放待编码元素,一个数组w存放权值,n为元素个数,ht为创建的哈夫曼树,hc为指针数组存储哈夫曼编码,这些作为函数参数传递到函数haffcoding中,创建编码树,然后按权值进行编码,这些都在一个函数中实现。 哈夫曼树节点: typedef struct { char data;
Int weight;
Int parent,lchild,rchild;
}htnode,huffmantree; 三、程序设计中遇到的问题
1、 选择一个数组来存储来存放编码,但是指针数组运用的不够熟练,造成值传递时
出错。最后查看c语言书籍得以解决.
2、 在选择所有权值中最小,次小的时候出现错误,造成乱序,编出来的编码不正确,
最后通过单步调试找出错误。
3、 hc=(huffmancode)malloc((n+1)*sizeof(char *));这里第一次分配空间为char
型,对指针数组很不熟悉造成的。
4、 还有其他的很多问题在程序中都有注释加重点。 四、程序源码
#include
#include
#include
#define length sizeof(htnode)
typedef struct htnode
{
char data;
int weight;
int parent,lchild,rchild;
}htnode,*huffmantree; //哈夫曼存储结构
typedef char **huffmancode; //存储哈夫曼编码表
void huffmancoding(huffmantree ht,huffmancode &hc,int *w,char *v,int n)//v是待编码元素数组,w是每个元素的权值,构造哈夫曼树ht,hc存放哈夫曼编码
{
int i,m,s1,s2,min1,min2,j;
char *cd;
int start,c,f;
if(n<=1) return;
m=2*n-1;
ht=(huffmantree)malloc((m+1)*length); //有n个叶子节点的hfuumantree需要
2n-1个结点存储
for(i=1;i<=n;++i,++w,++v) //对n个元素进赋值,权值,父亲左右孩子标记为0
{
0;
ht[i].data=*v;ht[i].weight=*w;ht[i].lchild=0;ht[i].parent=0;ht[i].rchild=
}
for(;i<=m;++i) //对后m-n个非叶子节点标记
{
ht[i].data=0;ht[i].weight=0;ht[i].lchild=0;ht[i].parent=0;ht[i].rchild=0 ;
}
for(i=n+1;i<=m;++i) //建树
{
s1=s2=0;min1=min2=32767;
for(j=1;j<=i-1;++j)
{
if(ht[j].parent==0)
{if(ht[j].weight {min2=min1;min1=ht[j].weight;s2=s1;s1=j;} //此第一次处排序出错 else if(ht[j].weight {min2=ht[j].weight;s2=j;}} } ht[s1].parent=i;ht[s2].parent=i; ht[i].lchild=s1;ht[i].rchild=s2; ht[i].weight=min1+min2; } //一下为从叶子结点到根节点求哈夫曼编码 hc=(huffmancode)malloc((n+1)*sizeof(char *)); //分配n个字符编码的头指针 向量 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)); //为第i个字符编码分配 空间 strcpy(hc[i],cd+start); } free(cd); } //huffmancoding int main() { printf(\哈夫曼编码*********** by-KangHui\\n\ int n,i; char *v; //存字符 int *w; //权值
相关推荐:
- [高等教育]公司协助某村精准扶贫工作总结.doc
- [高等教育]高二生物知识点总结(全)
- [高等教育]苏教版数学三年级下册《解决问题的策略
- [高等教育]仪器分析课程学习心得
- [高等教育]2017年五邑大学数学与计算科学学院333
- [高等教育]人教版七年级下册语文第四单元测试题(
- [高等教育]2018年秋七年级英语上册Unit7Howmuchar
- [高等教育]2017年八年级下数学教学工作小结
- [高等教育]湖南省怀化市2019届高三统一模拟考试(
- [高等教育]四年级下册科学_基础训练及答案教材
- [高等教育]城郊煤矿西风井管路伸缩器更换施工安全
- [高等教育]昆八中20182019学年度上学期期末考试
- [高等教育]项目部各类人员任命书
- [高等教育]上市公司经营水务产业的模式
- [高等教育]人教版高二化学第一学期第三章水溶液中
- [高等教育]【中考物理第一轮复习资料】四.压强与
- [高等教育]金坑水电站报废改建工程机电设备更新改
- [高等教育]高中生物教学工作计划简易版
- [高等教育]2017年西华大学攀枝花学院(联合办学)44
- [高等教育]最新整理超短爆笑英文小笑话大全
- 优秀教师继续教育学习心得体会
- 阳历到阴历的转换
- 留守儿童教育案例分析
- 华师17春秋学期《玩教具制作与环境布置
- 测速传感器新型安装装置的现场应用
- 人教版小学数学三年级下册第四单元
- 创业个人意向书
- 山东省潍坊市2012年高考仿真试题(三)
- [恒心][好卷速递]四川省成都外国语学校
- 多少人错把好转反应当成了病情加重处理
- 中外广播电视史复习资料整理
- 江苏省扬州市江都区宜陵镇中学2014-201
- 工程造价专业毕业实习报告
- 广西师范学院心理与教育统计
- aympkrq基于 - asp的博客网站设计与开
- 建筑业外出经营相关流程操作(营改增后
- 人治 德治 法治
- [精华篇]常识判断专项训练题库
- 中国共产党为什么要实行民主集中
- 小学数学第三册第一单元试卷(A、B、C




