1、ABA等因此若要设计长短不等的编码则必须是任一字符的编码都不是另一个字符的编码的前缀这种编码称作前缀编码然而如何进行前缀编码就是利用哈夫曼树来做也就有了现在的哈夫曼编码和译码二、概要设计利用哈夫曼树编/译码(一)、建立哈夫曼树(二)、对哈夫曼树进行编码(三)、输出对应字符的编码(四)、译码过程主要代码实现:struct code /结构体的定义 char a; int w; int parent; int lchild; int rchild;void creation(code *pint nint m); /建立哈夫曼树void coding(code *pint n); /编码void
2、display(code *p /输出函数void translate(char *hccode *p /译码三、 详细设计(一) 、建立哈夫曼树(二) 、对哈夫曼树进行编码for(c=if=pi.parent;f!=0;c=ff=pf.parent) if(pf.lchild=c) /左孩子编码为0 cd-start=; else /右孩子编码为1(三) 、输出对应字符的码字符编码a110b111c10d0(四) 、译码过程if(strcmp(ahci)=0) /比较两个字符串是否相等相等则输出0 for(c=2*n-1j=0;aj!=0j+) /从根出发按字符或确定找左孩子或右孩子 if(
3、aj=) /左孩子 c=pc.lchild; else c=pc.rchild; /右孩子四、 调试分析(一)、数字的输入判断(二)、字母的输入判断(三)、程序是否继续进行的 判断五、 用户手册(一) 、首先根据提示输入初始化数据提示输入一个数字请输入一个数a0a9999;提示输入一个字母则请输入一个字母(az)或者(AZ)中的一个字符;请勿在输入一个数字后再输入一个字符或者在输入一个字符后再输入一个数字(二) 在某一界面结束后会有请按回车继续下面操作提示请按提示进行操作如输入其他数字则无效知道输入回车符界面才会跳转(三) 对界面的操作可以自行选择在询问是否译码的时候请按要求进行选择在一次译码
4、结束后会询问是否继续译码如需要则输入y或者Y输入其他字符则退出程序六、测试结果(一)、初始化(二)、建立哈夫曼树(三)、哈夫曼编码(四)、哈夫曼译码(五)、错误判定附录:源代码:#includestring.hstdlib.hmalloc.h/译码/主函数void main() int inm; code *ht; printf(字符的数量:n(请输入一个大于0的数字输入多个数字则按第一个数字运行)n); while(scanf(%d&n)!=1|n9999) printf(重新输入:n fflush(stdin); m=2*n-1; /哈夫曼树中没有度为1的结点故含有m=2n-1个结点 ht
5、=(code*)malloc(m+1)*sizeof(code);/动态申请内存 for(i=1;ia|hti.aAZ) printf( fflush(stdin); scanf(/清空输入缓冲区往往是确保不影响后面数据的读取 输入字符的权值(请输入一个数字): while(scanf(hti.w)!=1|hti.w /清空输入缓冲区往往是确保不影响后面数据的读取 hti.lchild=0; hti.rchild=0; hti.parent=0; for(i=n+1;=m;i+) /对n+12n-1的数进行初始化 hti.a=* hti.w=0; creation(htm);请按回车进入哈夫曼
6、树对应界面n getchar(); system(cls display(ht请按回车进入编码对应界面n coding(htn);void creation(code *htint m)jm1m2t1t2;i+) j=1; /找到第一个最小值(双亲不为0) while(htj.parent!=0) /找到表中第一个没有双亲的结点 j+; t1=htj.w; m1=j; for(j=m1+1;jj+) if(htj.parent=0&htj.w!=0)/条件(htj.w!=0)是因为n2n-1的权值初始值为0 if(htj.wn) 编码不存在对应的字符!是否继续输入?是(输入y或者Y)否(其他)
7、n while(ch= int i;n序号 码值 权值 双亲 左孩子 右孩子n%d %c %d %d %d %dnipi.wpi.parentpi.lchildpi.rchild);设计体会通过这个课程设计让我对数据结构这门课程有了更深一步的了解对以后的深造奠定了基础本次课程设计的课题是:哈夫曼编码以及译码的实现本程序的特色是:结构清晰内容全面输入的错误提醒在输入的错误的提醒方面做了很大的改进不过在这方面仍存在些许的不足就是在输入一个字母的时候如果输入的数据是ab不会提示错误只会按第一个有效在初始化的时候输入a3这种数据则不会提示错误而是执行了下一条scanf语句输入的数字学习是一个无止境的过境我们要善于使用资源书籍网络等等努力地提升自己为今后的发展做更大的努力?
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1