haffmantree
来源:互联网 发布:ubuntu怎么输入中文 编辑:程序博客网 时间:2024/06/08 20:04
#include <cstdio>#include <iostream>#include <malloc.h>#include <cstring>using namespace std;#define INF 0xfffffftypedef struct{ unsigned int weight; unsigned int parent,lchild,rchild;}HTNode ,*HuffmanTree;typedef char * * HuffmanCode;void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC, int *w,int n){ int i,j,m,s1,s2,start; char *cd; unsigned int c,f; if(n<=1)return ; m=2*n-1; HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); for(i=1;i<=n;++i) { HT[i].weight=w[i-1]; HT[i].parent=0; HT[i].lchild=0; HT[i].rchild=0; } for(i=n+1;i<=m;i++) { HT[i].weight=0; HT[i].parent=0; HT[i].lchild=0; HT[i].rchild=0; } int min1=INF,min2=INF; for(i=n+1;i<=m;++i) { for(j=1;j<=i-1;j++) { if(HT[j].parent==0&&HT[j].weight<min1) { min1=HT[j].weight; s1=j; } } for(j=1;j<=i-1;j++) { if(HT[j].parent==0&&HT[j].weight<min2&&s1!=j) { 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=HT[s1].weight+HT[s2].weight; min1=INF; min2=INF; } for(i=1;i<=m;i++) { printf("%5d %5d %5d %5d\n",HT[i].weight,HT[i].lchild,HT[i].rchild,HT[i].parent); } 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]); printf("%d 's haffmancode is :%s\n",w[i-1],HC[i]); } free(cd);}int main(){ HuffmanTree HT; HuffmanCode HC; int w[100]={0},n,i; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&w[i]); } HuffmanCoding(HT,HC,w,n);}
阅读全文
0 0
- haffmantree
- HaffManTree哈夫曼树的编码和解码的个人学习心得感悟
- haffmanTree(哈夫曼树)的相关操作 + 两种遍历哈弗曼算法+ 无递归遍历+ 叶子节点遍历
- Java reflect proxy 源码
- Java NIO系列教程(3) :Buffer
- [EMWIN] 多国语言实现方法---csv文件实现
- stm32 DMA初始化选项研究
- Tcl+Python学习笔记(一)
- haffmantree
- K:Serializable或Externalizable对象的序列化
- 汉字统计
- java第九天/10.22
- SQL server 上机实验
- spark学习之spark基本架构和运行模式(初初级)
- servlet应该重点掌握的知识点
- Java-网络编程
- tab + fragment