




免费预览已结束,剩余4页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-数据结构实验报告班级: 姓 名: 学 号: E-mail: 日 期:实验题目: P149 5.2 哈夫曼编/译码器 完成Huffman 编码的译码过程。即输入一个码串,请翻译成相应的字符串。要求有编码过程和解码过程。(一) 需求分析1.本程序中,输入是字符串,包括+,-,*,/,(,),以及09,在输入的末尾需要加上#作为标记。2演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入相应数据,若正确则输出正确结果,若运算无解,则输入error。3程序执行的命令包括:(1)从文件读取字符和权值。(2)构建哈夫曼树。(3)输出构建的哈夫曼树。(4)选择1:对输入的字符串编码。(5)选择2:对输入的数字译码。(6)选择0:结束。4测试数据输入1A BGH输出字母:A 编码:1010字母: 编码:110字母:B 编码:100100字母:G 编码:100101字母:H 编码:0000 (二) 概要设计(三) 详细设计#include#include#includetypedef structint weight; /节点权值int parent,lchild,rchild; /左右孩子的节点htnode,*huffmantree;typedef char * *huffmancode;void select (huffmantree ht,int n,int *s1,int *s2) /挑选权值较小的两个节点int i,j,temp;for(i=1;i=n;i+)if(hti.parent=0)*s1=i;break;for(j=i+1;j=n;j+)if(htj.parent=0)*s2=j;break;for(i=1;ihti.weight)if(*s2!=i)*s1=i;for(j=1;jhtj.weight)if(*s1!=j)*s2=j;if(*s1*s2)temp=*s1;*s1=*s2;*s2=temp;/求哈夫曼书的算法void huffmancoding(huffmantree ht,huffmancode hc,int *w,int n)int i,m;int start,c,f;int s1,s2;char *cd; if(n=1) /n小于2无需构造赫夫曼树return ;m=2*n-1; /一共有m=2n-1个节点ht=(huffmantree) malloc(m+1)*sizeof(htnode);/0 号单元没用;for(i=1;i=n;i+) /数组初始化hti.weight=wi-1;hti.parent=0;hti.lchild=0;hti.rchild=0;for(;i=m;+i)hti.weight=0;hti.parent=0;hti.lchild=0;hti.rchild=0;for(i=n+1;i=m;i+)select(ht,i-1,&s1,&s2); hts1.parent=i;hts2.parent=i;hti.lchild=s1;hti.rchild=s2;hti.weight=hts1.weight+hts2.weight;/从叶子到根节点的逆向求每个字符的赫夫曼编码cd=(char*)malloc(n*sizeof(char); /分配球编码的工作空间cdn-1=0; /编码结束符for(i=1;i=n;i+) /逐个字符求赫夫曼编码start=n-1; /编码结束符位置for(c=i,f=hti.parent;f!=0;c=f,f=htf.parent) /从叶子到根你想编码分配空间if(htf.lchild=c) cd-start=0;else cd-start=1;hci=(char*)malloc(n-start)*sizeof(char); /为第i个字符编码分配空间strcpy(hci,&cdstart); /从cd复制编码(字符串)到hcvoid bianma(char p,char s,huffmancode hc)/编码int i,j;for (i=0;pi!=0;i+)for (j=0;j27;j+)if (pi=sj)printf(字母:%c编码:%sn,pi,hcj+1);break;printf(nn);return ;void yima(char str,char s,huffmancode hc)/译码int j,t=0;char *p,*r,*m;p=str;m=str;for (;*p=0;)for (t=0,j=1;j=27;j+)r=hcj;while (*p=*r & *p!=0)p+,r+,t+;if (*r=0)printf(%cn,sj-1);break;p=m;t=0;p=m+t;m=p;printf(nn);return ;int main()/主函数int i=0,n=27,m;int *w;char s27,p100;huffmantree ht;huffmancode hc;hc=(huffmancode)malloc(n*sizeof(huffmancode);w=(int *)malloc(n*sizeof(int);FILE *fp= fopen(a.txt,r);while(!feof(fp) fscanf(fp,%c %dn,&si,&wi);i+;huffmancoding(ht,hc,w,n);printf(输出编码为:n);for(i=0;in;i+)printf(字母为:%c 编码为:%s n,si,hci+1);while(1)printf(编码:1n译码:2n结束:0n);scanf(%d,&m);getchar();gets(p);switch(m)case 1:bianma(p,s,hc);break;case 2:yima(p,s,hc);break;case 0:return 0;default :printf(errornn);break;fflush(stdin);getchar();return 0; (四) 程序使用说明及测试结果1程序使用说明(1)本程序的运行环境为VC6.0。(2)进入演示程序后即显示提示信息:2测试结果3、调试过程中遇到的问题是如何解决提以及对设计与实现的回顾讨论和分析;问题:本应输出数字,但是输出的是相应ASCLL码对应的字符;运算产生的两位数会被当成两个数参加下一次计算解决:原来的数字栈是char型,改成int 型问题:输出格式没有对齐解决:运用左对齐和长度限制4运行界面(五)、实验总结(实验心得
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年元宇宙社交平台用户需求预测与发展瓶颈分析报告
- 2025年医院信息化建设电子病历系统优化与医疗信息化应用场景研究报告
- 艺术品数字化交易平台投资价值与风险评估报告
- 2025年医院信息化建设电子病历系统功能优化深度分析报告
- 2025年医院电子病历系统在医院信息化建设中的数据挖掘技术应用报告
- 2025年汽车轻量化材料在汽车轻量化车身制造工艺中的应用趋势报告
- 2025年Z世代消费行为分析:新消费品牌产品创新与品牌定位报告
- 农村金融服务创新与绿色金融:2025年可持续发展报告
- 文化与科技融合在数字艺术展览中的创新应用与发展趋势报告
- 爆破员考试题及答案
- 2024-2025学年人教版一年级下数学期末试卷(含答案)
- 中国当代文学专题-003-国开机考复习资料
- 杜邦安全理念课件
- 《房屋面积测算技术规程》DGJ32TJ131-2011
- 管道无损检测施工专项方案
- 酒店工程部考核表
- 槽钢桩支护施工方案
- 土石坝剖面图绘制12.28
- 水利水电工程防渗墙工程质量检测
- 工程塑料 第六章聚甲醛
- YY_T 0681.2-2010无菌医疗器械包装试验方法 第2部分:软性屏障材料的密封强度
评论
0/150
提交评论