6.10 数据结构 HuffmanTree的代码参考
Posted huangjiaxin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6.10 数据结构 HuffmanTree的代码参考相关的知识,希望对你有一定的参考价值。
#include<stdio.h> #define MAX 21 typedef struct char data; int weig,parent,left,right; huffn; typedef struct char cd[MAX]; int start; huffc; int main() huffn ht[2*MAX]; huffc hcd[MAX],d; int i,k,j,f,h,r,n=0,c,m1,m2; printf("请输入元素(1->%d:",MAX-1); scanf("%d",&n); if(n>MAX-1||n<1) return 1; for(i=0;i<n;i++) fflush(stdin); printf("第%d个元素->\n\t结点值:",i+1); scanf("%c",&ht[i].data); printf("权重"); scanf("%d",&ht[i].weig); for(i=0;i<2*n-1;i++) ht[i].parent=ht[i].left=ht[i].right=0; for(i=n;i<2*n-1;i++) m1=m2=0x7fff; j=r=0; for(k=0;k<i;k++) if(ht[k].parent==0) if(ht[k].weig<m1) m2=m1; r=j; m1=ht[k].weig; j=k; else if(ht[k].weig<m2) m2=ht[k].weig; r=k; ht[j].parent=i; ht[r].parent=i; ht[i].weig=ht[j].weig+ht[r].weig; ht[i].left=j; ht[i].right=r; for(i=0;i<n;i++) d.start=n; c=i; f=ht[i].parent; while(f!=0) if(ht[f].left==c) d.cd[--d.start]=‘0‘; else d.cd[--d.start]=‘1‘; c=f;f=ht[f].parent; hcd[i]=d; printf("输出huffman编码:\n"); for(i=0;i<n;i++) printf("%c",ht[i].data); for(k=hcd[i].start;k<n;k++) printf("%c",hcd[i].cd[k]); printf("\n");
以上是关于6.10 数据结构 HuffmanTree的代码参考的主要内容,如果未能解决你的问题,请参考以下文章