您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 哈夫曼编码译码器源代码
附录(源代码):#includestdio.h//核心代码#includestring.h#includestdlib.htypedefstruct//结构体{chardata;intweight;intparent;intlchild;intrchild;}HTNode;HTNodeht[30];typedefstruct{charcd[30];intstart;}HCode;HCodehcd[30];voidCreateHT(HTNodeht[],intn)//创建哈弗曼树{inti,k,lnode,rnode;intmin1,min2;for(i=0;i2*n-1;i++){ht[i].parent=ht[i].lchild=ht[i].rchild=0;}for(i=n;i2*n-1;i++){min1=min2=32767;lnode=rnode=0;for(k=0;k=i-1;k++)if(ht[k].parent==0){if(ht[k].weightmin1){min2=min1;min1=ht[k].weight;rnode=lnode;lnode=k;}elseif(ht[k].weightmin2){min2=ht[k].weight;rnode=k;}}ht[lnode].parent=i;ht[rnode].parent=i;ht[i].weight=ht[lnode].weight+ht[rnode].weight;ht[i].lchild=lnode;ht[i].rchild=rnode;}}voidCreateHCode(HTNodeht[],HCodehcd[],intn)//进行哈夫曼编码{inti,f,c;HCodehc;for(i=0;in;i++){hc.start=n;c=i;f=ht[i].parent;while(f!=0){if(ht[f].lchild==c){hc.cd[hc.start--]='0';}else{hc.cd[hc.start--]='1';}c=f;f=ht[f].parent;}hc.start++;hcd[i]=hc;}}voidCodeInput(intn,HTNodeht[])//输入字符及权值进行哈夫曼编码{inti;charch[30];scanf(%s,ch);for(i=0;in;i++){scanf(%ld,&ht[i].weight);}printf(***************************************-\n);}voidCodeOutput(intn,HCodehcd[])//输出哈夫曼编码{inti,j;printf(所有字符的哈弗曼编码为:);for(i=0;in;i++){for(j=hcd[i].start;j=n;j++){printf(%lc,hcd[i].cd[j]);}}printf(\n);for(i=0;in;i++){printf(序号%d:,i);for(j=hcd[i].start;j=n;j++){printf(%lc,hcd[i].cd[j]);}printf(\n);}}voidsave(intn)//将其存入data.text文件中{inti;FILE*fp;if((fp=fopen(f:\\data.txt,w))==NULL){printf(can'topenthisfile!!!);exit(0);}else{for(i=1;i=n;i++){fprintf(fp,%ld,ht[i].weight);}printf(Youhavesaveditsuccessful!!!);}fclose(fp);}voidmain()//主函数{intnum;charflag='y';while(flag=='y'||flag=='Y'){system(cls);printf(*********************************\n);printf(欢迎使用哈夫曼编码系统\n);printf(*******************************\n);printf(*********1.生成哈夫曼树*********\n);printf(*********2.哈夫曼编码*********\n);printf(********3.哈夫曼权值存储*********\n);printf(********4.退出*********\n);printf(*******************************\n);printf(请选择操作类型(1-4):);scanf(%d,&num);printf(**********************************************\n);switch(num){case1:intn,i;printf(请输入要输入的字符数量n为:);if((scanf(%ld,&n))&&(n!=0)){printf(\n请输入%d个字符和%d个对应权值先将所有字符输入再输对应权值\n在此输入:,n,n);CodeInput(n,ht);CreateHT(ht,n);printf(对应的权值为:\n);for(i=0;in;i++){printf(%d:%ld,i,ht[i].weight);if((i+1)%4==0){printf(\n);}}}printf(\n**************************************-\n);break;case2:CreateHCode(ht,hcd,n);CodeOutput(n,hcd);printf(**********************************************);break;case3:save(n);printf(*******************************************);break;case4:printf(************感谢使用本程序****************\n);exit(1);printf(******************************************);break;default:printf(Error!Youmustputthenumberbetween1--4);printf(\n*************************************\n);}printf(\n继续或退出(yorn):);getchar();flag=getchar();}}
本文标题:哈夫曼编码译码器源代码
链接地址:https://www.777doc.com/doc-3275011 .html