哈夫曼树
来源:互联网 发布:java 项目中使用log4j 编辑:程序博客网 时间:2024/06/08 11:15
#include<stdio.h>#include<stdlib.h>#define M 100typedef struct hufTree{ char symbol ; int weight; struct hufTree *llink,*rlink; int plink;}HTNode,*HFtree;struct hufCode{ int bits[M]; int start;}code[M];void select(struct hufTree *hf,int s,int *x1,int *x2){ int i; int v1,v2; v1=v2=32767; *x1=*x2=0; for(i=1;i<=s;i++) if(hf[i].plink==0) if(hf[i].weight<v1) { v2=v1;*x2=*x1; v1=hf[i].weight; *x1=i; } else if(hf[i].weight<v2) { v2=hf[i].weight; *x2=i; } }void Create_hufTree(HFtree hf,int n){ int i,s1,s2; for(i=1;i<=2*n-1;i++) { hf->llink=hf->rlink=NULL; hf[i].plink=0; } for(i=n+1;i<=2*n-1;i++) { select(hf,i-1,&s1,&s2); hf[s1].plink=hf[s2].plink=i; hf[i].llink=&hf[s1]; hf[i].rlink=&hf[s2]; hf[i].weight=hf[s1].weight+hf[s1].weight; }}void Set_hufCode(struct hufTree hf[],struct hufCode code[],int n){ int i,j; int f; for(i=1;i<=n;i++) { code[i].start=n+1; j=i; f=hf[j].plink; while(f) { code[i].start--; if(hf[f].llink==&hf[j]) code[i].bits[code[i].start]=0; else code[i].bits[code[i].start]=1; j=f; f=hf[j].plink; } }}void Output_hufTree(struct hufTree hf[],struct hufCode code[],int n){ int i,j; for(i=1;i<=n;i++) { printf("\n%3c%7d%:",hf[i].symbol,hf[i].weight); printf(" "); for(j=code[i].start;j<=n;j++) printf("%d",code[i].bits[j]); }}int main(void){ int i,n; HFtree hf; printf("输入节点数:\n"); scanf("%d",&n); hf=(HFtree)malloc(2*n*sizeof(HTNode)); printf("依次输入各节点及其权值:\n"); for(i=1;i<=n;i++) { scanf("%s",&hf[i].symbol); scanf("%d",&hf[i].weight); } Create_hufTree(hf,n); Set_hufCode(hf,code,n); printf("输出各叶子结点的哈夫曼编码:\n"); printf("节点 权值 哈夫曼编码\n"); Output_hufTree(hf,code,n); printf("\n"); return 0;}
0 0
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- MD5加密
- HDU 2844(多重背包)
- Java EE容器
- Oulipo HDU杭电1686【KMP】
- HDU 5715 XOR 游戏(二分+dp+01字典树)
- 哈夫曼树
- VB6 基于API的远程开机代码
- 【机器学习】bias and variance
- MyEclipse 新建->后面的菜单选项设置
- linux下为java设置正确的时区
- 编写最小生成树代码遇到的小问题
- 分类讨论
- LightOJ 1138(求末尾零个数)
- SDUTACM 数据结构实验之排序七:选课名单