为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

哈弗曼的编码与译码 试验报告

2017-10-06 11页 doc 50KB 39阅读

用户头像

is_281650

暂无简介

举报
哈弗曼的编码与译码 试验报告哈弗曼的编码与译码 试验报告 数据结构实验报告 实验三:哈弗曼的编码与译码 姓名:汪思雨 学号:201006030102问题[1]:实现哈弗曼的编码与译码 问题求解 A.源代码 #include #include #include typedef struct { char info; unsigned int weight; unsigned int parent, lchild, rchild; }HTNode,*HuffmanTree; typedef char **HuffmanCode; ...
哈弗曼的编码与译码  试验报告
哈弗曼的编码与译码 试验报告 数据结构 实验三:哈弗曼的编码与译码 姓名:汪思雨 学号:201006030102问题[1]:实现哈弗曼的编码与译码 问题求解 A.源代码 #include #include #include typedef struct { char info; unsigned int weight; unsigned int parent, lchild, rchild; }HTNode,*HuffmanTree; typedef char **HuffmanCode; int n,m,w[27]={184,64,13,22,32,103,21,15,47,57,1,5,32,20,57,63,15,1,48,51,80,23,8,18, 1,16,1}; int flag[54]; char *info=" ABCDEFGHIJKLMNOPQRSTUVWXYZ"; HuffmanTree HT; HuffmanCode HC; void Select(HuffmanTree HT, int j,int &s1,int &s2) { //1到j~~ 选择双亲节点为0,并且最小的两个子叶节点 int b,finds=0; // s1=1;s2=1; for(b=1;b<=j;b++){ if(flag[b]==2&&finds==0) {s1=b;finds=1;} else if(HT[b].weight
:\n"); //getchar(); //--- 从叶子到根逆向求每个字符的哈夫曼编码 --- 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'; else cd[--start] = '1'; HC[i] = (char *)malloc((n-start)*sizeof(char)); strcpy(HC[i], &cd[start]); } // display HC /*for (i=1;i<=n;i++) { printf(" "); puts(HC[i]); } */ free(cd); } // HuffmanCoding void CheckCoding() {// 将ToBeTra中的正文进行译码并存入CodeFile FILE *fp1,*fp2; int ab; char c; char str[100]; fp1=fopen("ToBeTra.txt","r") ; fp2=fopen("CodeFile.txt","w+"); if(fp1==NULL||fp2==NULL) { printf("cannot open or create these files!\n"); } else { c=fgetc(fp1);//按字符位置来一个个编码 while(c!=EOF) { if(c==' ') ab=1; else ab=c-63; strcpy(str,HC[ab]); fputs(str,fp2); c=fgetc(fp1); } printf("CodeFile has been saved in the file CodeFile.txt\n"); } fclose(fp1);fclose(fp2); } void HuffmanTranslate() { //将CodeFile中的代码进行译码并存入Textfile FILE *fp1,*fp2; int key; char c,cc; char str[1000]; fp1=fopen("CodeFile.txt","r"); fp2=fopen("TextFile.txt","w+"); if(fp1==NULL||fp2==NULL) printf("no file to translate!"); else { c=fgetc(fp1); while(c!=EOF) { //遍历树 key=m; while(HT[key].lchild!=0&&HT[key].rchild!=0) { if(c=='0') key=HT[key].lchild; else key=HT[key].rchild; c=fgetc(fp1); }//最后为所指向的位置. cc=info[key-1]; fprintf(fp2,"%c",cc); } } fclose(fp1);fclose(fp2); } int txt() { FILE *fp; char s[100]; if((fp=fopen("ToBeTra.txt","w+"))==NULL) printf("ToBeTra.txt cant be created! \n");/// else { printf("please in put a txt,it will be save in the file ToBeTra.txt:\n"); gets(s); if(fputs(s,fp)!=NULL) printf("\nOK\n"); } fclose(fp); return 0; }//text function is ended; main() { int op,a; char *str=" ABCDEFGHIJKLMNOPQRSTUVWXYZ"; while(1) {printf("---------------------------------------------\n"); printf(" 赫夫曼编码和译码 \n"); printf(" 1.初始化 \n"); printf(" 2.输入对应的正文内容 \n") ; printf(" 3.进行赫夫曼编码 \n"); printf(" 4.进行赫夫曼译码 \n") ; printf(" 5.退出赫夫曼操作 \n"); printf(" 请输入1.2.3.4.5 \n"); printf(" ---------------------------------------------\n"); //--- scanf("%d",&op); getchar(); switch(op) { case 1 : HuffmanCoding(HT,w,27,str); break; case 2 : if(txt()==0) printf("OK\n"); break; case 3 : CheckCoding(); printf("OK\n"); break; case 4 : HuffmanTranslate(); break; case 5 : exit(0);break; } } } B.程序运行截图 B.分析说明 通过哈弗曼算法,调用。 采用一个集合的形式来实现哈弗曼的编码和解码。
/
本文档为【哈弗曼的编码与译码 试验报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索