哈夫曼编码
来源:互联网 发布:苏联解体中国反应 知乎 编辑:程序博客网 时间:2024/05/29 17:59
以后上课要好好听,这落下的花了好几个小时才搞懂,以前学的指针也忘了,不知不觉的都快五点了赶快睡觉
#include<stdio.h>#include<string.h>#include<stdlib.h>typedef struct n{int w;int parent, lchild, rchild;} HTNode, *HuffmanTree; //动态分配数组存储哈夫曼树typedef char * * HuffmanCode; //动态分配数组存储哈夫曼编码表HuffmanTree HT;HuffmanCode HC;int *w;char *z;int flag=0;int numb=0;int cmp(const void *a,const void *b){struct n *aa=(struct n *)a;struct n *bb=(struct n *)b;return aa->w-bb->w;}void select(int i,int *a,int *b)//查找两个最小的点{int n,t,m;qsort(HT,i,sizeof(HT[1]),cmp);for(t=1;t<=i;t++){if(HT[t].parent==0){*a=t;break;}}for(t=t+1;t<=i;t++){if(HT[t].parent==0){*b=t;break;}}return ;}void HTree(int *w,int n){int m,i,j,k,s1,s2;if(n<=1)return ;m=2*n;HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));HuffmanTree p;for(p=HT+1,i=1;i<=n;++p,i++){p->w=w[i];p->parent=0;p->lchild=0;p->rchild=0;}for(;i<m;++p,i++){p->w=0;p->parent=0;p->lchild=0;p->rchild=0;}for(i=n+1;i<m;i++){select(i-1,&s1,&s2);//printf("%d %d\n",s1,s2);HT[s1].parent=i;HT[s2].parent=i;HT[i].lchild=s1;HT[i].rchild=s2;HT[i].w=HT[s1].w+HT[s2].w;}}void GetHCood(int n){int i,j,k,start,c,f;char *cd;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';elsecd[--start]='1';HC[i]=(char *)malloc((n-start)*sizeof(char));strcpy(HC[i],&cd[start]);}free(cd);return ;}int main(){int i,n,j;int a[22222];printf("请输入n(代表有n个权值):");while(scanf("%d",&i),i!=0){printf("请输入n个权值:\n");for(j=1;j<=i;j++)scanf("%d",&a[j]);HTree(a,i);GetHCood(i);for(j=1;j<=i;j++)printf("%d的哈夫曼编码是%s\n",j,HC[j]); printf("请输入n(代表有n个权值):");}return 0;}
0 0
- 信源编码---哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- Dynamics AX 配置 SANA,录入SANA基础数据
- [转]SSH三大框架的工作原理及流程
- hibernate总结
- 基于Redis实现分布式消息队列(2)
- leetcode - Maximum Depth of Binary Tree C#
- 哈夫曼编码
- win7+ubuntu双系统安装
- poj 1947 Rebuilding Roads(树型DP)
- 一、前言
- 黑马程序员IOS基础---之C to OC
- 二分查找(折半查找),Java实现
- eclipse优化方法
- vim 中:wq和:wq的不同之处
- JAVA菜鸟入门(14) Anonymous Class 和 final variable