实验四、4哈夫曼树编码
来源:互联网 发布:血清甘油三酯增高 知乎 编辑:程序博客网 时间:2024/06/15 02:32
/*
Description:哈夫曼树编码问题 创建哈夫曼树并编码
*/
#include<stdio.h>
#include<stdlib.h>
#define max 20
struct huffnode
{
char date;//数据域
int weight;//权值
int parent;//双亲域
int left;//左孩子
int right; //右孩子
};
struct huffcode
{
char cd[max];
int start;
};
int main()
{
struct huffnode ht[2*max];//存放哈夫曼结点的数组
struct huffcode hcd[max],d;//哈夫曼编码栈类型
int n,i;
printf("请输入n:");//n结点个数
scanf("%d",&n);
for(i=1;i<=n;i++)//为每个结点负权值
{
//getchar();
printf("%d:",i);
scanf("%c",&ht[i].date);
printf("weight:");
scanf("%d",&ht[i].weight); //负权值
}
int m1,m2,l,r,k,c,f;
for(i=1;i<=2*n-1;i++)//初始化每个结点的双亲 左右指针域
{
m1=32767;//设初始值无穷大
r=0;////l r为指向左右孩子的指针
l=0;
for(k=1;k<=i-1;k++)//找权值最小的两棵树,并用吗
if(ht[k].weight==0)
if(ht[k].weight<m1)
{
m2=m1;
r=l;
m1=ht[k].weight;
l=k;
}
else if(ht[k].weight<m2)
{
m2=ht[k].weight;
r=k;
}
ht[l].parent=i;
ht[r].parent=i;
ht[i].left=l;
ht[i].right=r;
}
for(i=1;i<=n;i++)//进行哈夫曼编码
{
d.start=n;
c=i;
f=ht[i].parent;
while(f!=0)
{
if(ht[f].left==c)
d.cd[d.start]='0';
else
d.start=d.start-1;
c=f;
f=ht[f].parent;
}
hcd[i]=d;
}
printf("输出哈夫曼编码:/n");
for(i=1;i<=n;i++)
{
printf("%c:",ht[i].date);
for(k=hcd[i].start;k<=n;k++)
printf("%c",hcd[i].cd[k]);
printf("/n");
}
}
- 实验四、4哈夫曼树编码
- 实验四-dpcm编码
- 实验四 DPCM编码
- 实验四 DPCM编码
- 实验四:DPCM编码
- 数据压缩实验四:DPCM编码
- 数据压缩实验四:DPCM编码
- 实验四——DPCM编码
- 实验4 DPCM编码
- 实验4 编码裁剪算法
- 数据压缩实验4-DPCM编码
- 编码实验
- 实验四
- 实验四
- 实验四
- 实验四
- 实验四
- 实验四
- 这地方不错~
- 跟我快乐学C++系列:(4)理解函数的调用
- JefferyZhao教导我们...
- 为啥这没个动态语言的讨论区,比如Python
- 一道简单的关于override的测试题
- 实验四、4哈夫曼树编码
- 在网上发现了一篇关于接口的文章拿来分享一下
- 提供Cygwin国内镜像的链接地址
- Head Frist JavaScript(中文版)第一章翻译完毕
- 文件上传的原理
- 下载Head First JavaScript的方法
- 选择适合过一辈子的人
- 编程学习中的一些错误认识
- static和const关键字的作用