数据结构哈夫曼编码实现

数据结构哈夫曼编码实现

ID:19666582

大小:50.50 KB

页数:6页

时间:2018-10-04

数据结构哈夫曼编码实现_第1页
数据结构哈夫曼编码实现_第2页
数据结构哈夫曼编码实现_第3页
数据结构哈夫曼编码实现_第4页
数据结构哈夫曼编码实现_第5页
资源描述:

《数据结构哈夫曼编码实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、#include#includetypedefstructhaha{intweight;intparent,lchild,rchild,flag;chardata;}haha,*friday;typedefstructhehe{charm;intn;structhehe*next;}hehe,*zhouwu;typedefchar**gege;voidbegin(zhouwu&l){zhouwup,q,r;intflag;l=(zhouwu)malloc(sizeof(hehe));l->n

2、ext=NULL;l->n=0;r=p=q=l;printf("请输入要编码的字符串:");for(inti=0;;){p=(zhouwu)malloc(sizeof(hehe));p->n=0;p->m=getchar();if(p->m=='')break;flag=0;while(r->next!=NULL){if(r->next->m==p->m){r->next->n++;flag=1;free(p);break;}elser=r->next;}if(flag==0){p->next=q->next;p->n++;

3、q->next=p;q=p;l->n++;}r=l;}}voidselect(friday&ht,intk,int&x,int&y){intfirst,j[2],m=0,i;for(inth=1;h<=2;h++){for(first=32767,i=1;i<=k;i++){if(ht[i].flag==0){if(first>ht[i].weight){first=ht[i].weight;j[m]=i;}}}x=j[0];y=j[1];m++;ht[x].flag=1;if(m==2)ht[y].flag=1;}}voidh

4、uffmancoding(friday&ht,zhouwu&l){intm;m=2*l->n-1;ht=(friday)malloc((m+1)*sizeof(haha));fridayp;zhouwuq=l;inti;for(p=ht+1,i=1;i<=l->n;++i,++p){p->weight=q->next->n;p->flag=0;p->parent=0;p->lchild=0;p->rchild=0;p->data=q->next->m;q=q->next;}for(;i<=m;++i,++p){p->flag=0

5、;p->weight=0;p->parent=0;p->lchild=0;p->rchild=0;p->data=NULL;}ints1,s2;for(i=l->n+1;i<=m;++i){select(ht,i-1,s1,s2);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;}char**hc;hc=(gege)malloc((l->n+1)*sizeof(char

6、*));char*cd;cd=(char*)malloc(l->n*sizeof(char));cd[l->n-1]='';intc,f,start;for(i=1;i<=l->n;++i){start=l->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((l->n-start)*sizeof(char));intq=

7、start;for(intd=0;dn-start;d++)hc[i][d]=cd[q++];}free(cd);for(i=1;i<=l->n;i++)printf("字符%c的编码是:%s",ht[i].data,hc[i]);}voidtranslate(friday&ht,zhouwu&l){charm[100];intk,j=l->n;inti=2*j-1,flag=0;printf("请输入密文编码:");gets(m);printf("译码后是:");for(intc=0;;c++){if(m[c]

8、=='')break;if(m[c]=='0')k=ht[i].lchild;if(m[c]=='1')k=ht[i].rchild;if(m[c]!='0'&&m[c]!='1'){system("cls");printf("输入的密文必须是由字符0和

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。