Huffman树的创建及编码
来源:互联网 发布:湖南有线网络怎样 编辑:程序博客网 时间:2024/06/04 19:38
直接上代码:
#include <stdio.h>#include <stdlib.h>#include <string.h>#define inf 99999999struct HuffmanNode{ int weight; int lchild,rchild,parent;};void Select(struct HuffmanNode *p,int n,int& num1,int& num2){ int i; int min1,min2; min1=inf; for(i=1;i<=n;i++){ //在还没有被选择的节点中,选择最小的节点 if(p[i].parent==0&&p[i].weight<min1){ min1=p[i].weight; } } for(i=1;i<=n;i++){ if(p[i].parent==0&&p[i].weight==min1){//找到该节点的序号 num1=i; p[i].parent=1;//将其父母置为非空,表明这个节点已经被选 break; } } min2=inf; for(i=1;i<=n;i++){ //在还没有被选择的节点中,选择次小的节点 if(p[i].parent==0&&p[i].weight<min2){ min2=p[i].weight; }} for(i=1;i<=n;i++){ if(p[i].parent==0&&p[i].weight==min2){ //找到该节点的序号 num2=i; p[i].parent=1;//将其父母置为非空,表明这个节点已经被选 break; } }}void Huffman_Coding(int n,struct HuffmanNode* &head,char** &HC){ int m,i,s1,s2;//构造赫夫曼树 if(n<1) printf("无法构造赫夫曼树\n"); m=2*n-1; head=(struct HuffmanNode *)malloc((m+1)*sizeof(struct HuffmanNode));//0号元素不用 for(i=1;i<=m;i++){ if(i<=n) scanf("%d",&head[i].weight); else head[i].weight=0; head[i].lchild=0; head[i].rchild=0; head[i].parent=0; } for(i=n+1;i<=m;i++){ Select(head,i-1,s1,s2); head[s1].parent=i; head[s2].parent=i; head[i].lchild=s1; head[i].rchild=s2; head[i].weight=head[s1].weight+head[s2].weight; } char *cd; int start,c,f; //对赫夫曼树进行编码 HC=(char **)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=head[i].parent;f!=0;c=f,f=head[f].parent){ if(head[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(){ int n,i; struct HuffmanNode *head; char **HC; printf("请输入赫夫曼树的节点个数\n"); scanf("%d",&n); Huffman_Coding(n,head,HC); printf("输出赫夫曼树的编码\n"); for(i=1;i<=n;i++){ printf("%s\n",HC[i]); } return 0;}
1 0
- Huffman树的创建及编码
- huffman树的创建与编码
- huffman树的编码及应用
- 树的应用及Huffman编码
- Huffman树的构造及编码
- Huffman树及编码的实现
- Huffman树及Huffman编码(数据结构)
- 数据结构Huffman树及编码
- Huffman树&&Huffman编码
- Huffman树的创建
- Huffman树的创建
- C++Huffman树的构造实现及编码译码过程
- Huffman编码文件压缩 - Huffman树的建立与编码
- HuffmanTree的实现及Huffman编码
- Huffman树及编码C++实现
- huffman树和huffman编码
- huffman树和huffman编码
- Huffman树与Huffman编码
- contiki学习笔记1:helloworld+process结构分析
- 常用字符编码简介
- 【DSP开发】DSP程序优化
- 如何利用github打造博客专属域名
- java SpringMVC 搭建的步骤
- Huffman树的创建及编码
- 解决birt报表内存溢出
- JavaScript学习笔记——数据类型
- 百度地图【上】
- 关于主数据管理及病人主索引的说明
- HDU 1003 Max Sum
- java 设计模式简单汇总
- JavaScript学习笔记——表达式与运算符
- JavaScript学习笔记——语句与严格模式