欢迎来到天天文库
浏览记录
ID:37755348
大小:18.89 KB
页数:19页
时间:2019-05-30
《哈弗曼树-VC++6.0版》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、哈弗曼树源代码:#include#include#include#defineN255#defineM2*N-1/*运行成功标记*/intok=0;/*保存原文件名*/charfile[20]={'0'};/*哈夫曼树节点类型*/typedefstruct{intdata;/*字符值*/intweight;/*权重*/intparent;/*双亲结点*/intlchild;/*左孩子结点*/intrchild;/*右孩子结点*/}Tree;/*哈夫曼编码类型*
2、/typedefstruct{/*存放哈夫曼码*/charcd[N];intstart;}Code;/*生成节点及编码数组*/Treeht[M];Codehcd[N];/*函数声明*/intcmp(constvoid*,constvoid*);intNumberOfChar();voidReset();voidInputFile();voidEncode(int);voidDecode(int);voidOutputFile(int);voidPrintHuffmanCode(int);voidCreateH
3、T(int);voidCreateHCode(int);/*主函数*/intmain(){intx=0;intn=0;charch;while(1){system("cls");printf("1.读入原文件");printf("2.在屏幕上打印哈夫曼代码表");printf("3.编码原文件");printf("4.解码原文件");printf("5.退出");printf("Input1-5:");scanf("%d",&x);switch(x){case1:Reset();Input
4、File();if(ok){/*排序使得有效字符在前面*/qsort(ht,N,sizeof(Tree),cmp);/*记下有效字符的个数*/n=NumberOfChar();CreateHT(n);CreateHCode(n);OutputFile(n);system("pause");}break;case2:system("cls");if(ok){PrintHuffmanCode(n);}else{printf("原文件尚未读入!");}system("pause");break;case3:sy
5、stem("cls");if(ok){Encode(n);}else{printf("原文件尚未读入!");}system("pause");break;case4:system("cls");if(ok){Decode(n);}else{printf("原文件尚未读入!");}system("pause");break;case5:return0;default:/*防止输入错误序号,刷新缓冲区*/fflush(stdin);}}return0;}/*快速排序比较函数*/intcmp(constvo
6、id*a,constvoid*b){return(*(Tree*)a).weight<(*(Tree*)b).weight?1:-1;}/*统计有效的字符数量*/intNumberOfChar(){inti,num=0;for(i=0;i0)num++;}returnnum;}/*初始化哈夫曼树*/voidReset(){inti;for(i=0;i7、[i].rchild=-1;}}/*读入文件内容*/voidInputFile(){FILE*fp;charch;system("cls");printf("请输入原文件名:");fflush(stdin);scanf("%s",file);/*打开原文件*/if((fp=fopen(file,"rt"))==NULL){printf("找不到原文件%s!",file);ok=0;system("pause");return;}/*读入字符并处理权重*/while(fscanf(fp,"%c",&ch)!8、=EOF){ht[ch].data=ch;ht[ch].weight++;}/*关闭文件指针*/fclose(fp);printf("原文件%s读入成功!",file);ok=1;}/*编码*/voidEncode(intn){inti,k;charch;FILE*fp1,*fp2;/*利用哈夫曼代码表进行编码*/if(access("Huffman_Code.txt",0)!=0){print
7、[i].rchild=-1;}}/*读入文件内容*/voidInputFile(){FILE*fp;charch;system("cls");printf("请输入原文件名:");fflush(stdin);scanf("%s",file);/*打开原文件*/if((fp=fopen(file,"rt"))==NULL){printf("找不到原文件%s!",file);ok=0;system("pause");return;}/*读入字符并处理权重*/while(fscanf(fp,"%c",&ch)!
8、=EOF){ht[ch].data=ch;ht[ch].weight++;}/*关闭文件指针*/fclose(fp);printf("原文件%s读入成功!",file);ok=1;}/*编码*/voidEncode(intn){inti,k;charch;FILE*fp1,*fp2;/*利用哈夫曼代码表进行编码*/if(access("Huffman_Code.txt",0)!=0){print
此文档下载收益归作者所有